Passport 기반 세션처리




1
2
3
4
5
6
7
8
9
passport.serializeUser(function(user, done){
  console.log("passport session save :", user.id);
  done(null, user.id);
});
 
passport.deserializeUser(function(id, done){
  console.log("passport session get id :", id);                     
  done(null, id);
});
cs


세션을 저장하는 부분에 대한 처리이다.

strategy의 콜백함수에서 done의 매개변수로 false를 주지 않고 객체를 전달했을 

그값을 serialize로 사용할수 있다. 

이러한 값은 serialize 콜백 함수에 user값으로 전달이 된다.

(console.log는 값을 확인 하기 위한 로그이다)




1
2
3
4
5
// done에 false가 전달 되었을때(에러 시)
return done(nullfalse,{message: 'your email is already used'})                                            
 
// done에 객체가 전달 되었을때
return done(null, {'email':email,'id' :rows.insertId})
cs


즉 2번째와 같은 상황에서 객체로 전달된

{'email':email, 'id':row.inserId}를 serialize로 사용할 수 있다는 말이다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var express = require("express");
var app = express();
var router = express.Router();
var path = require('path');
 
router.get('/'function(req, res){
  console.log('main js loaded', req.user);
  var id = req.user;
  res.sendFile(path.join(__dirname, '../../public/main.html'));                                              
  res.render('main.ejs',{'id':id});
})
 
module.exports = router;
 
 
cs


로그인이 성공하면 /main을 요청하는데 미리 main.js 파일을 생성해뒀다.

req.user로 deserialize의 id 값에 접근할 수 있다.

이 값을 main.ejs에 전달해 준다.




1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>main</title>
  </head>
  <body>
    <h1>hello world</h1>
    <h3>welcome, <%id %> !!</h3>                                                                        
  </body>
</html>
cs


main.ejs 파일이다.

main.js에서 받아온 id 값을 출력한다.






다음과 같은 결과가 나온다.

숫자 2은 auto_increment 된 유저의 id 값이다. 



예제코드


신고

+ Recent posts

티스토리 툴바