connect.sid=s2_BViuqciPgMdb9-7rjaWBjUc0Vd0dJv.xcpTrAHMnhYRgXFJBlvzbLyGvV2womKtCz0IVifGyqQ; path=/; domain=dev-mango.[[http://searchad.naver.com|searchad.naver.com]];
이렇게 signed cookie를 만드는 이유는 클라이언트에서 조작하지 못하도록 하기 위함임
2_BViuqciPgMdb9-7rjaWBjUc0Vd0dJv{
"_id" : "2_BViuqciPgMdb9-7rjaWBjUc0Vd0dJv",
"session" : "{\\"cookie\\":{\\"originalMaxAge\\":null,\\"expires\\":null,\\"secure\\":false,\\"httpOnly\\":true,\\"path\\":\\"/\\"},\\"passport\\":{}}",
"expires" : ISODate("2014-09-18T06:46:54.395Z")
}
{
"_id" : "2_BViuqciPgMdb9-7rjaWBjUc0Vd0dJv",
"session" : "{\\"cookie\\":{\\"originalMaxAge\\":null,\\"expires\\":null,\\"secure\\":false,\\"httpOnly\\":true,\\"path\\":\\"/\\"},\\"passport\\":{\\"user\\":\\"53fbe331559b79e51b5d47fa\\"}}",
"expires" : ISODate("2014-09-18T06:50:00.934Z")
}
passport.use(new LocalStrategy(...));function(email, password, done) {
User.findOne({ email: email }, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { message: 'Unknown user' });
}
if (!user.authenticate(password)) {
return done(null, false, { message: 'Invalid password' });
}
console.log('passport.use() in access after user.authenticate()');
return done(null, user);
});
}
여기서 email을 키로 해서 검색된 사용자 정보가 verify에 성공하면 세션에 등록할 사용자 정보가 됨
app.route('/login').post()에 등록되는 미들웨어 중 하나인 passport.authenticate()가 호출됨
Strategy.prototype.authenticate()에서 verify()를 실행하여 사용자 password의 일치여부를 확인함
verified가 callback으로 호출되면서 self.success(user)를 호출하여 user 객체를 전달함
strategy.success()를 정의하면서 user 파라미터를 넘겨받게 되어 있는데, 이 값이 req.logIn() 호출에 사용됨
authenticate()에서 req.logIn()을 호출하는데 이 함수는 바로 node_modules/passport-oauth/node_modules/passport/lib/passport/http /request.js에서 정의되어 있음
req.logIn()에서 this._passport.instance.serializeUser()를 호출해서 req.session.passport.user의 값을 채워넣음
직렬화 함수로 Authenticator.prototype.serializeUser()가 호출되는데 여기서 user 객체를 직렬화하여 req.session.passport에 달아놓게 됨