我已經有了Passport安裝程序來驗證存儲在mongodb中的用戶。似乎工作正常:身份驗證成功/失敗並會話變量得到設置。但是,獲得護照檢查會話失敗。有些東西似乎是非常錯誤的,我添加到deserializeUser
回調中的console.log語句永遠不會看到白天的光芒。我認爲我的問題與deserializeUser
從未被調用有關。任何人都可以診斷我的失誤?PassportJS反序列化用戶從來沒有叫
// Passport configuration
passport.serializeUser(function(user, cb){ cb(null, user.id) });
passport.deserializeUser(function(uid, cb){
console.log("Trying to deserialize user: "+uid);
User.findById(uid, function(err, user){
cb(err, user);
});
});
// auth strategy function
passport.use(new LocalStrategy({usernameField: 'email'},
function(email, pass, done){
User.findOne({email: email}, function (err, user) {
if (err)
return done(err);
if (!user)
return done(null, false, {message: "Couldn't find user"});
var crypted = bcrypt.hashSync(pass, user.salt);
if(user.hashpass != crypted)
return done(null, false, {message: "Bad password"});
return done(null, user);
});
}
));
passport.CreateSession = function (req, res, next) {
passport.authenticate('local', function(err, user, info){
if(err || !user)
return res.json({status: "Failure: "+err});
req.logIn(user, function (err){
if(err)
return res.json({status: "Failure: "+err});
return res.json({status: "Authenticated"});
});
})(req, res, next);
};
在app.js如下:
app.post('/session', passport.CreateSession); // restify better
app.del('/session', passport.DestroySession);
app.get('/images', passport.CheckSession, routes.images);
Jared - 感謝您的幫助。是的,我有app.use(passport.session());在app.js –
這是節點0.8.0,表達2.5.10,和最新的護照,順便說一句。 –
嗯,我假設你有正確的會議設置和持續?如果是這樣,我沒有看到任何明顯的。以下是我的建議:1.嘗試在節點0.6.x下運行,以查看0.8中是否存在不兼容問題。 2.發佈可運行的複製粘貼要點,然後運行它並查看我能找到的內容。 –