Passport + Node.js/添加用户后自动登录 [英] Passport + Node.js / Automatic login after adding user
问题描述
我正在使用护照进行身份验证和会话处理.到目前为止一切正常.我实现了登录"表单,以将新用户添加到该应用中.添加用户后,我想自动登录.
I am using passport for authentication and session handling. Everything works fine so far. I implemented a "Sign in" form to add new users to the app. After a user is added I would like to log him/her in automatically.
实现此目标的最佳方法是什么-我应该使用用户凭据重定向到"/登录"还是有另一种/更好的方法(调用serializeUser)来做到这一点?
What is the best way to achieve this - should I redirect to "/login" with the user credentials or is there another/better way(call serializeUser) to do that?
到目前为止,我认为我还不太了解完成"功能(在serializeUser和LocalStrategy中)的工作方式或工作方式...
So far I think I did not really understand the way the "done" function (in serializeUser and LocalStrategy) is working or what it is doing ...
这是我的代码:
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的波纹管中的代码,因为它更通用,更直接
Please use code from the @Weston answer bellow, because it's more universal and straightforward
应该看起来像这样
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应该提供本地"名称
I don't sure about name of strategy, but by default LocalStrategy should provide 'local' name
http://passportjs.org/guide/authenticate/
这篇关于Passport + Node.js/添加用户后自动登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!