我正在尝试在/register
表单上提交POST后立即进行身份验证并登录用户。理想情况下,我希望用户能够注册,然后立即重定向到仪表板,而无需再次输入凭据。
我的服务器正在使用Passport 0.1.17,并且本地策略已配置为使用电子邮件地址和密码进行登录。目前的代码是:
app.post('/register', function(req, res) {
// attach POST to new User variable
var registerUser = new User({ email: req.body.email, password: req.body.password, name: req.body.name });
// save registerUser Mongo
registerUser.save(function(err) {
if(err) {
console.log(err);
} else {
console.log('registerUser: ' + registerUser.email + " saved.");
}
});
// here is where I am trying to authenticate and then redirect
passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }),
res.redirect('/dashboard');
});
我如何重构此代码以保存新用户,然后进行身份验证并最终重定向到仪表板?
提前致谢!
答案 0 :(得分:20)
这是我在阅读req.login之后提出的解决方案:
app.post('/register', function(req, res) {
// attach POST to user schema
var user = new User({ email: req.body.email, password: req.body.password, name: req.body.name });
// save in Mongo
user.save(function(err) {
if(err) {
console.log(err);
} else {
console.log('user: ' + user.email + " saved.");
req.login(user, function(err) {
if (err) {
console.log(err);
}
return res.redirect('/dashboard');
});
}
});
});
我想稍微清理它,并认为错误的部分可能更强大,但这是一个有效的解决方案。请注意,是其他人实现了这一点,他们应该知道它是专门用于使用电子邮件而不是用户名的本地护照策略。
答案 1 :(得分:0)
我认为您正在寻找注册方法,该方法将进行注册(并隐藏密码)
https://www.npmjs.com/package/passport-local-mongoose(搜索注册方法)。
app.post('/register', function(req, res) {
// New user variable created.
// Note: Password is not part of the new User variable; you don't want to simply store sensitive information in the database.
var registerUser = new User({ email: req.body.email, name: req.body.name });
// Register new user. Note the 2nd variable (password). If registration's successful (no errors), redirect.
registerUser.register(registerUser, req.body.password, function (err, newUser){
if(!err){
passport.authenticate('local', req, res, function(){
res.redirect('/dashboard');
});
}
});
});