我正在尝试使用PassportJS为MEAN堆栈构建身份验证面板。我有以下代码用于使用电子邮件(而不是默认用户名)和密码注册新用户:
router.post("/register", function (req, res) {
var newUser = new User({
username: req.body.email
});
User.register(newUser, req.body.password, function (err, user) {
if (err) {
return res.render('account/signup');
}
passport.authenticate("local")(req, res, function () {
res.redirect("/account/profile");
});
});
});
但是,在运行服务器时,我会看到一个屏幕,上面写着 Bad Request 。 可以假设新用户帐户已成功创建,因为我可以登录该帐户。
我认为错误起源于此处:
passport.authenticate("local")(req, res, function () {
res.redirect("/account/profile");
});
答案 0 :(得分:1)
passport.authenticate
是一个中间件,这意味着您必须使用3个参数(req, res, next)
来调用它:
...
passport.authenticate("local", function(err, user, info) {
if (err) return next(err);
if (!user) return res.redirect('/login');
req.logIn(user, function(err) {
if (err) return next(err);
return res.redirect("/account/profile");
});
})(req, res, next);
...
或在post方法中使用它:
router.post("/register", function (req, res, next) {
var newUser = new User({
username: req.body.email
});
User.register(newUser, req.body.password, function (err, user) {
if (err) {
return res.render('account/signup');
}
// go to the next middleware
next();
});
}, passport.authenticate('local', {
successRedirect: '/account/profile',
failureRedirect: '/login'
}));