我必須知道什麼時候調用Serialize和Deserialize,爲了測試我已經放了alert(user.id)
但沒有發生任何操作。當Serialize和Deserialize調用護照js
我有一些疑問:
- 從哪裏
user
對象passport.serializeUser(function(user, done){...
已收到 - 什麼樣的作用發揮
process.nextTick()
這裏 - 如何調用回調函數即
function(req, email, password, done)
,如果我發送多個表單值如(姓名,電子郵件,密碼,地址,手機)。
下面是代碼: - :
app.post('/login',
passport.authenticate('local'),
function(req, res) {
// If this function gets called, authentication was successful.
// `req.user` contains the authenticated user.
res.redirect('/users/' + req.user.username);
});
在你的項目,請找到該代碼,並檢查它看起來像上面而不是當你驗證用戶
//config/passport.js
var LocalStrategy = require('passport-local').Strategy;
var User = require('../app/models/user');
module.exports = function(passport) {
passport.serializeUser(function(user, done) {
alert(user.id);//// Here is my testing alert
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
passport.use('local-signup', new LocalStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
},
function(req, email, password, done) {
process.nextTick(function() {
User.findOne({ 'local.email' : email }, function(err, user) {
if (err)
return done(err);
if (user) {
return done(null, false, req.flash('signupMessage', 'That email is already taken.'));
} else {
var newUser = new User();
newUser.local.email = email;
newUser.local.password = newUser.generateHash(password);
newUser.save(function(err) {
if (err)
throw err;
return done(null, newUser);
});
}
});
});
}));
}
我有一個問題,當你說:「passport.initialize()和passport.session()...他們是那些導致serializeUser加載**用戶ID到req.user如果一個序列化的用戶被發現在服務器(whe n使用mongodb,如果用戶存在於mongodb中)。 **「用戶ID從哪裏來?當你說」如果用戶存在於mongodb中「,它會自動查找用戶模型嗎? –
你的代碼可以重構爲'if(req.url.match('/ xxx'))passport.session(); next();' – NERDYLIZARD