티스토리 뷰
정상적인 프로세스는 /logout 처리를 통해서 기존의 session cookie를 삭제해야 하는데
새로운 계정의 request가 들어와서 cookie를 만들었다면 res.clearCookie가 안먹히는(...) 현상이있었다
router.get('/logout', (req,res,next)=> {
res.clearCookie("access_token");
res.redirect("/");
});
아래와 같이 setCookie에서 overwrite: true ( default false ) 로 해결
이전에 설정한 동일한 이름(여기서는 acces_token)을 덮어쓸지 여부이다.
// 쿠키를 [ 키 : 값 ] 으로 파싱
const parseCookie = req => {
if (!req.headers.cookie) return {}
// reduce => reducer : 누적값 + 현재값
return req.headers.cookie.split(';').reduce((obj, pair) => {
pair = pair.trim()
const k = pair.split('=')[0].trim();
const v = pair.split('=')[1].trim();
obj[k] = v;
return obj;
}, {})
}
const cookies = {};
// 세션 쿠키 가져오기
cookies.getCookie = (req) => {
const {access_token} = parseCookie(req); // 쿠키파서
if( access_token ) return access_token; // access_token 존재하면 리턴
else return false;
}
// 세션 쿠키 생성하기
cookies.setCookie = (res, token) => {
return res.cookie("access_token", token, {
sameSite:'none',
secure: true, // https, ssl 모드에서만
// 1d => 1000*60*60*24*1
maxAge: 1000*60*60*24*7, // 7d, new Date() 밀리초
httpOnly: true, // javascript 로 cookie에 접근하지 못하게 한다.
overwrite: true // 이전에 설정한 동일한 이름의 쿠키를 덮어 쓸지 여부. 기본값은 false
});
}
module.exports = cookies;
'■ 백엔드 ■ > NodeJS' 카테고리의 다른 글
Passport local authentication flowchart (0) | 2022.03.18 |
---|---|
express res.status 처리 (0) | 2020.09.12 |
A cookie associated ... `SameSite` attribute ( Node.js example for SameSite=None; Secure ) (0) | 2020.08.24 |
express - multiple routes in a single line (0) | 2020.07.21 |
nodemon (0) | 2020.07.09 |
댓글