我正在使用护照进行身份验证和会话处理。到目前为止一切正常。我实现了“登录”表单,以将新用户添加到该应用中。添加用户后,我想自动登录。
实现此目的的最佳方法是什么-我应该使用用户凭据重定向到“ /登录”,还是有另一种/更好的方法(调用serializeUser)来做到这一点?
到目前为止,我认为我还不太了解“ done”功能(在serializeUser和LocalStrategy中)的工作方式或工作方式…
这是我的代码:
passport.serializeUser(function(user, done) { done(null, user._id); }); passport.deserializeUser(function(id, done) { authProvider.findUserById('users', id, function (err, user) { done(err, user); }); }); passport.use(new LocalStrategy( function(email, password, done) { authProvider.getUserByEmail('users', email, function(error, user){ if(error) { return done(error); } if (!user) { return done(null, false, { message: 'Unknown user ' + email });} if (user.password != password) { return done(null, false);} return done(null, user); }); } )); app.post('/login', passport.authenticate('local', { failureRedirect: '/login'}), function(req, res) { res.redirect('/');}); app.post('/sign', function(req, res){ authProvider.saveUser(...do stuff), function(error, user){ if(error){ res.redirect('/sign'); } else { res.redirect('/'); } }); });
有人知道该怎么做吗?
请使用@Weston答案中的代码,因为它更通用,更直接
应该看起来像这样
app.post('/sign', function(req, res){ authProvider.saveUser(...do stuff), function(error, user){ if(error){ res.redirect('/sign'); } else { passport.authenticate('local')(req, res, function () { res.redirect('/account'); }) } }); });
我不确定策略的名称,但是默认情况下LocalStrategy应该提供“本地”名称
http://passportjs.org/guide/authenticate/