작성
·
488
1
안녕하세요, nodejs를 이 강의로 학습하고 있는 학생입니다. 이 영상을 보고 따라했는데 제 컴퓨터에서 deserializeUser가 호출되지 않고 그에 따라서 main.js가 컴퓨터 network에서 404를 나타내며 user에 값을 담아내지 못하고 있었습니다 소스코드는 다음과 같습니다. 그리고 결과값은 아래처럼 나왔습니다. 인터넷에서는 cookie secure를 false로 하면 해결할 수 있다그래서 시도해보았는데 잘 모르겠어서 이렇게 글을 올립니다 감사합니다.
// 결과값입니다.
get join url
Session {
cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true },
flash: {}
}
47
passport session save : 47
{ email: '1234ㄹa', id: 47 }
main js loaded undefined
Session {
cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true },
flash: {},
passport: { user: 47 }
}
//여기 아래가 소스코드입니다
router.get('/', function(req, res){
var msg;
var errMsg = req.flash('error')
if(errMsg) msg = errMsg;
console.log('get join url');
console.log(req.session)
res.render('join.ejs', {'message' : msg});
})
passport.serializeUser(function(user, done){
console.log('passport session save : ', user.id);
console.log(user);
done(null, user.id);
})
passport.deserializeUser(function(id, done){
console.log('passport session get id data: ');
done(null, id);
})
passport.use('local-join', new LocalStrategy
(
{
usernameField: 'email',
passwordField: 'password',
passReqToCallback : true
},
function(req, email, password, done)
{
var query = connection.query('SELECT * FROM user WHERE EMAIL = ?', [email], function(err, rows)
{
if(err) return done(err);
if(rows.length)
{
console.log('existed user');
return done(null, false, {message : 'your email is already used'})
}
else
{
var sql = {email: email, name: 'hi', pw: password};
var query = connection.query('INSERT INTO user SET ?', sql, function(err, rows)
{
if(err) throw err;
return done(null, {'email' : email, 'id' : rows.insertId});
})
}
})
}
));
//passport routing 처리
router.post('/', passport.authenticate('local-join', {
successRedirect: 'main',
failureRedirect: 'join',
failureFlash: true
}));
module.exports = router;
답변 2
0
passport.deserializeUser((id, done) =>{// seesion 에서 id값을 뽑아서 처리 해주는 곳console.log('passport session get id data: ', id);
//여기서 db의 값을 찾아서 사이트에 띄워주기 가능
done(null, id); //세션의 값을 뽑아서 전달해주는 역할
});
여기서 db조회해올때 id 값이 0이 나오면 0을 undefined라고 인식하는 것 같아요.
문자열이나 0이외의 값들을 넣어보시면 잘 작동되는 마법을 경험하실 겁니다.
0
기억이 잘 나진 않는데 이거 한번 돌려보시겠어요? 순서 때문에 차이가 생겼나 그랬던거 같습니다.