繁体   English   中英

Passport.js定制回调传递参数

[英]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!useruser === false )。 err表示该过程中存在一些内部错误,但是如果用户不存在,则用户将为false 这取决于您如何编写策略。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM