Javascript Passport.js自定义回调传递参数
到目前为止我有这个代码Javascript Passport.js自定义回调传递参数,javascript,express,passport.js,Javascript,Express,Passport.js,到目前为止我有这个代码 app.post('/login', passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }), function(req, res) { return res.redirect('/profile/' + req.user.username); }); 成功登录正在工作。但是,当登录失败时,它会通过G
app.post('/login', passport.authenticate('local', {
failureRedirect: '/login',
failureFlash: true
}), function(req, res) {
return res.redirect('/profile/' + req.user.username);
});
成功登录正在工作。但是,当登录失败时,它会通过GET
请求重定向到/login
。所以我需要一些像这样的附加代码来处理这种情况:
app.get('/login', ...);
我需要以这样的方式实现这一点:如果POST
失败并重定向到此GET
它将发送导致失败的用户名。这样我就可以将用户名重新填充到表单中,这样就不会在每次有人因为用户名不正确而尝试登录失败时清除该用户名
我怎样才能做到这一点
编辑:这就是我写策略的方式
passport.use(User.createStrategy())代码>
User.js
您可以调用passport。使用(req,res,next)
对自己进行身份验证。它接受回调函数作为输入,因此您可以确定该过程是否成功
app.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err || !user) {
// failed
} else {
// successful
}
})(req, res, next);
});
您可能需要处理错误和!用户
(用户===false
)分别err
表示过程中存在一些内部错误,但当用户不存在时,用户将false
。这取决于你是如何编写策略的。@Amir请查看我的编辑,了解我是如何编写策略的strategy@Ogen您是否也有passport.use(新的LocalStrategy(User.authenticate())代码>某处?如果其他设置正确,我的答案中的代码应该可以工作。您可以通过向用户和显示内部错误
消息来处理错误
情况!例如,用户名/密码错误的用户
。还有console.log
err
(如果存在)以查看原因。
app.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err || !user) {
// failed
} else {
// successful
}
})(req, res, next);
});