findOne같은 sequelize 메서드들도 사용법을 보면 then을 써서 비동기로 사용하기도 하고
많은 요청이 들어오더라도 비동기를 이용해서 순차적으로 처리하기 위해서 사용하는 것이라고 이해했다. 요청을 처리하는 동안 다른 요청을 처리할 수 있다.
만약 비동기가 아니면 서버가 일을하다가 다른 요청을 받을 수 없을 것이다.
const userInfo = await Users.findOne({
where: { userId: req.body.userId, password: req.body.password },
});
로그인 할때 findOne 메서드를 써서 일치하는 유저정보를 찾아보는 과정이 있었다.
테스트 파일에서는 accessToken에서 유저정보가 담겨있어서 그럼 굳이 db를 왜 뒤져보는걸까? 의문이 있었다. 하지만 실제로는 토큰에는 유저정보가 담겨있지 않다. 권한을 얻기위해 필요한 카드키같은 역할일 뿐이었다.
로그인시 클라이언트가 토큰을 갖고있다면, 서버에서 유저가 db에 존재하는 일치하는 유저인지 확인해보아야한다.
응답 헤더,바디중 헤더에 set-cookie:키 = 값 형태로 쿠키를 전달한다.
const server = http.createServer((req, res) => {
res.setHeader('Content-Type', 'text/html');
res.setHeader('X-Foo', 'bar');
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('ok');
});
express프레임워크를 이용해서도 할 수 있다.
express-session 라이브러리를 이용해서 cookie설정을 할 수 있다.
const session = require('express-session');
app.use(
session({
secret: '@shhhh',
resave: false,
saveUninitialized: true,
cookie: {
domain: 'localhost',
path: '/',
maxAge: 24 * 6 * 60 * 10000,
sameSite: "None",
httpOnly: true,
secure: true,
},
})
);
express에서는 cookieParser모듈을 사용할 수 있다.
const cookieParser = require("cookie-parser");
app.use(cookieParser());
쿠키 생성시
res.cookie(key,value,{option})
형식으로 만들어주면 된다.
const authorization = req.headers.authorization
const token = authorization?.split(' ')[1]
authorization이 있으면 split해주고 없으면 undefined가 된다.
MDN optional chanining
CORS는 왜이렇게 우리를 힘들게 할까
동일출처 정책은 samesite옵션과 다르다