• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

로그인 시 DB token 정보 업데이트 관련 질문

21.11.22 17:25 작성 조회수 181

0

안녕하세요. 학습중 궁금한 점이 생겨서 질문 남깁니다. 

/api/users/login에 POST 요청을 보내면 해당 로그인 요청 정보와 일치하는 정보가 DB 내에 있는지 여부를 판독해 로그인 성공/실패가 이루어지는 것까지는 알겠습니다. 

그런데 login 요청을 보내기만 해도 DB 내에 token 정보가 업데이트되는 점이 이해가 되지 않습니다. 분명 /api/users/auth에 GET 요청을 보내야 DB 내의 token 정보를 업데이트하는 것으로 코드를 작성한 것 같은데 말이죠... 

login시 client의 cookie에 token을 저장하긴 했으나, DB에 token 정보를 업데이트하는 것은 /api/users/auth에 GET 요청을 보내야 이루어지는 것 같은데, 도대체 왜 login 요청을 보내기만 해도 DB 내의 token 정보가 업데이트되는 것인지 궁금합니다. 

답변 부탁드립니다. 

항상 좋은 강의 감사드립니다. 

답변 1

답변을 작성해보세요.

1

안녕하세요 !! 
로그인 시에 요청을 처리하는 핸들러를 보면 

router.post("/login", (req, res) => {
User.findOne({ email: req.body.email }, (err, user) => {
if (!user)
return res.json({
loginSuccess: false,
message: "Auth failed, email not found"
});

user.comparePassword(req.body.password, (err, isMatch) => {
if (!isMatch)
return res.json({ loginSuccess: false, message: "Wrong password" });

user.generateToken((err, user) => {
if (err) return res.status(400).send(err);
res.cookie("w_authExp", user.tokenExp);
res
.cookie("w_auth", user.token)
.status(200)
.json({
loginSuccess: true, userId: user._id
});
});
});
});
});

이렇게 되어있는데 여기서 generateToken 메소드가 보이시죠? 
그곳에서 토큰이 디비에 저장 됩니다. 

userSchema.methods.generateToken = function(cb) {
var user = this;
var token = jwt.sign(user._id.toHexString(),'secret')
var oneHour = moment().add(1, 'hour').valueOf();

user.tokenExp = oneHour;
user.token = token;
user.save(function (err, user){
if(err) return cb(err)
cb(null, user);
})
}

여기에 보시면 됩니다 ~ !   감사합니다.

David Heo님의 프로필

David Heo

질문자

2021.11.24

우선 답변 감사드립니다. 제가 저 부분을 놓쳤었네요 ㅎㅎ; 

근데 한가지 의문점이 더 생기게 되었습니다.  

로그인 요청시 DB에 token이 저장된다면 /api/users/auth에 GET 요청을 보내는 Router는 도대체 왜 만든 것인가요? 

현재까지는 딱히 사용되지 않은 것 같은데 말이죠...