728x90
반응형
Node.js 에서 session-file-store을 이용할 때 세션 정보가 변경되지 않을 때의 해결 방법에 대해서 다뤄보겠습니다.
세션은 쿠키를 좀 더 안전하게 사용하기 위해 세션 id를 쿠키에 저장하고, 그 세션 id에 관련된 민감한 정보들은 따로 저장해두기 위해서 사용합니다.
그런데 세션 정보를 아래와 같이 넣어주었는데도 정작 json 파일 안에는 그 변경 부분이 반영되지 않은 경우가 있습니다.
app.post('/auth/login', function(req, res){
var user = {
username: 'tech',
password: '123!',
nickName: 'Tech'
}
var username = req.body.username;
var password = req.body.password;
if(username === user.username && pwdpassword=== user.password){
req.session.nickName = user.nickName;
res.redirect('/success')
}else{
res.redirect('/fail')
}
})
위의 코드를 보면, login을 하였을 때에 user의 정보와 일치하면 세션에 nickName 정보를 넣어주고 있습니다.
그런데 위의 코드를 동작시켜도 nickName 정보를 받아오지 못하는 경우가 생깁니다.
세션 json을 열어보았을 때에도 내가 넣어준 nickName 정보가 없습니다.
이는 세션 스토어에 저장하기도 전에 redirect가 먼저 실행되었기 때문에 발생합니다.
따라서 session에 nickName을 기록하기도 전에 먼저 success 페이지로 이동이 되어 정작 success 페이지에 도착했을 때에는 세션에 nickName 정보가 없게 되는 것입니다.
따라서 이는 세션저장소에 저장이 모두 될 때까지 기다려준 다음에 redirect를 할 수 있도록 콜백함수를 사용해야 합니다.
이러한 상황을 방지하기 위해 아래와 같이 req.session.save를 사용하도록 합시다 :)
app.post('/auth/login', function(req, res){
var user = {
username: 'tech',
password: '123!',
nickName: 'Tech'
}
var username = req.body.username;
var password = req.body.password;
if(username === user.username && password=== user.password){
req.session.nickName = user.nickName;
req.session.save(function() {
res.redirect('/success');
});
}else{
res.redirect('/fail')
}
})
728x90
반응형
'Node.js' 카테고리의 다른 글
[Node.js] node.js 에서 base64 이미지를 S3에 저장하기 (0) | 2021.06.23 |
---|---|
[Node.js] 하드코딩 피하기, dotenv 사용법 (0) | 2021.03.18 |
[Node.js] rest api 파라미터에 한글 넣어 요청하기 (0) | 2021.03.12 |