![](/img/trans.png)
[英]Passport.js append custom parameter to authorizationURL-call
[英]Passport.js custom callback passing parameter
到目前为止我有这段代码
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
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
passportLocalMongoose = require('passport-local-mongoose');
var User = new Schema({
username: String,
firstName: String,
lastName: String,
dateOfBirth: Date,
email: String,
mobileNumber: Number,
favouriteWebsite: String,
favouriteColour: String
});
User.methods.getFullName = function() {
return this.firstName + " " + this.lastName;
}
User.methods.getAge = function() {
return ~~((Date.now() - new Date(this.dateOfBirth)) / (31557600000));
}
User.plugin(passportLocalMongoose, {
usernameQueryFields: ["username", "email"], // TODO not working
errorMessages: {
IncorrectPasswordError: "Incorrect password!",
IncorrectUsernameError: "Username does not exist!"
}
});
module.exports = mongoose.model("User", User);
您可以打电话给passport.authenticate
使用(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);
});
您可能要分别处理err
和!user
( user === false
)。 err
表示该过程中存在一些内部错误,但是如果用户不存在,则用户将为false
。 这取决于您如何编写策略。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.