node.js 17

내 로그인 정보 매번 불러오기

로그인 이후 새로고침을 하게 되면 로그인이 풀리는 문제가 발생한다. 어떻게 해결해야 될까? 1. 프론트에서 페이지가 새로고침이 될때마다(useEffect) 로그인 된 user의 정보를 매번 불러준다. 2. 백엔드 서버(user router)에서는 get을 통해 로그인 된 user의 정보를 매번 불러온다. - passport 전략에 의해 로그인, req.user의 정보가 있으면 user의 정보를 매번 반환하고 - 없다면 null을 보내면 된다. 1. user 정보를 가져올 router를 만들어준다. (get) // routes/user.js const router = require('express').Router(); const { User } = require('../models'); // GET /us..

node.js 2022.01.18

credentials로 cookie 공유하기

로그인을 하거나 로그아웃을 할 때 또는 어떤 이벤트가 발생할때, middleware를 만들어 router를 검사하고 로그인 여부에 따라 접근가능 여부를 검사했다. 그런데 로그인을 해도 서비스를 이용할때 로그인이 필요하다는 401 에러가 발생한다. 이유는 cookie가 공유가 안돼서 그렇다. 그렇다면 로그인 후 cookie를 어떻게 공유할까? 그전에 브라우저의 원리에 대해 이해가 필요하다. 이전에 브라우저와 서버와의 도메인이 달라 CORS문제를 겪은바가 있다. cookie를 공유하는 것도 브라우저와 서버의 도메인이 다르면 cookie 전달이 안된다. cookie가 전달이 되어야 백엔드 서버가 지금 요청을 보낸 사용자가 누구인지 알 수가 있다. 이 문제를 해결하기 위해 proxy방식을 사용할 수 있지만 co..

node.js 2022.01.18

middleware로 router 검사하기

로그인을 하거나 게시글 작성 등.. 사용자가 무언가를 하려고 할 때, 로그인이 된 상태에서만 접근할 수 있는 router가 있고, 로그인을 하지 않은 상태에서 접근할 수 있는 router가 있다. 따라서 midlleware를 하나 만들어 router를 검사해주는 것이 좋다. 각각의 router마다 이 기능을 넣기에는 코드가 중복이 되므로 routes/middleware.js를 따로 만들어 분리하고 불러다 사용하는 것이 좋다. // routes/middleware.js exports.isLoggedIn = (req, res, next) => { if (req.isAuthenticated()) { next(); // 비어있으면 다음 미들웨어로 간다 } else { res.status(401).send('로그..

node.js 2022.01.18

cookie/session과 로그인 흐름

로그인 전략을 세웠으면 이제 app.js에서 미들웨어를 추가해준다. 먼저 express-session과 cookie-parsser를 npm install 해준다. $npm install express-session $npm install cookie-parser const express = require('express'); const server = express(); const session = require('express-session'); const passport = require('passport'); const passportConfig = require('./passport'); passportConfig(); server.use(cookieparser()); server.use(sess..

node.js 2022.01.17

[node.js] passport로 로그인

1. 로그인을 위해 user/login 라우터를 하나 만든다. // back/app.js const express = require('express'); const server = express(); const userRouter = require('./routes/user'); server.use('/user', userRouter); server.listen(3065, () => { console.log('서버를 실행중입니다.'); }); back/routes/user const router = require('express').Router(); // POST /user/login, 로그인 router.post('/login', (req, res, next) => { // todo }); 2. bac..

node.js 2022.01.17

[node.js/CORS] CORS 문제 해결하기

회원가입을 진행해보니 아래와 같은 에러가 발생하는 것을 확인할 수 있었다. CORS 문제이다. CORS(Cross-origin resource sharing)란? 간단하게 말하면 서로 다른 도메인에서 요청이 오갈때 발생하는 문제이다. 이 문제는 브라우저에서 차단하기 때문에 발생한다. Access to XMLHttpRequest at 'http://localhost:3065/user' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is prese..

node.js 2022.01.16

[node.js - express]회원가입 구현하기

전에 app.js 에서 나눴던 router를 server.use()를 통해 불러 왔었다. const express = require('express'); const server = express(); const userRouter = require('./routes/user'); server.use('/user', userRouter); server.listen(3065, () => { console.log('서버를 실행중입니다.'); }); 이제 프론트에서 회원가입 시 post 요청을 통해 회원가입 정보를 보낼 것이고 이를 서버에서 받아 database에 넣어준다. routes/user.js const router = require('express').Router(); const bcrypt = req..

node.js 2022.01.16

sequelize 실행하기

이제 npm run dev 를 통해 서버를 실행하면 Unkown database "데이터베이스의 이름" 라는 error가 뜰 것이다. 아직 명령어를 통해 db를 만들어 주지 않았기 떄문이다. 아래의 명령어를 통해 sequelize로 db를 만들어주자. $npx sequelize db:create 아래와 같이 결과가 나온다면 성공적으로 db가 생성된 것이다. MySQL_Workbench를 통해 성공적으로 table이 생성 되었는지 확인해보자.

node.js 2022.01.16