使用护照注册时的错误请求
Posted
技术标签:
【中文标题】使用护照注册时的错误请求【英文标题】:Bad Request when registering with passport 【发布时间】:2018-06-14 05:58:56 【问题描述】:我正在尝试使用 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");
);
【问题讨论】:
【参考方案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'
));
【讨论】:
嗨。感谢您的回复。在 post 方法中使用代码时,我收到错误 ReferenceError: next is not defined 是的,那是因为你没有将下一个参数传递给 post 方法,应该是这样的:router.post("/register", function (req, res, next) ...
以上是关于使用护照注册时的错误请求的主要内容,如果未能解决你的问题,请参考以下文章