【问题标题】:Why doesn't my custom callback in Passport JS work?为什么我在 Passport JS 中的自定义回调不起作用?
【发布时间】:2018-06-07 05:04:12
【问题描述】:

我正在尝试让用户能够注册我的网站,并将凭据存储在 mongodb 上。

这是我的 auth.js 文件,其中定义了路由:

router.post('/signup', (req,res,next) => {
    Passport.authenticate('local-signup', err => {
    if (err) {
        if (err.name === "MongoError" && err.code === 11000) {
            res.status(409).json({
                success: false,
                message: "Unsuccessful",
                errors: {
                    email: "This email is already taken."
                }
            });
        }
        res.status(400).json({
            success: false,
            message: "Unsuccessful",
            errors: {
                unknown: "Could not process for some reason. Contact admin."
            }
        });
    }        
    res.status(200).json({
        success: true,
        message: "Successful",
        errors: {}
    });
}) (res, req, next);
}

最后一个括号有点乱,但相信我,这不是语法错误。 这个 sn-p 是我定义护照策略的地方:

require ('../Models/Users')
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/onlinestore');
const User = mongoose.model('User');
const PassportLocalStrategy = require('passport-local').Strategy;
const Passport = require('passport');

module.exports = Passport.use(new PassportLocalStrategy({
        usernameField: 'email',
        passwordField: 'password',
        session: false,
        passReqToCallback: true,
    }, (email, password, done) => {              
        let user = new User();
        user.email = email.trim();
        user.password = password.trim();
        user.save(err => {
            if (err) {
                console.log(err);
                return done(err);
            } else {
                console.log("Success");
                return done(null);
            }
        });
    }
));

路由能够获取用户输入的密码和用户。当我点击提交时,实际上什么都没有发生;服务器不控制台,客户端也不控制台。经过一些调试后,我认为问题是由于 Passport.Authenticate 没有被调用,但我不知道为什么。如有需要,我可以发布其他代码 sn-ps,谢谢!

【问题讨论】:

    标签: javascript mongodb express passport.js


    【解决方案1】:

    这是 OP。我能够找到解决方案。 1) 在我的 auth.js 文件中,

    Passport.authenticate('local-signup', err => {
    

    将“本地注册”替换为“本地” 所以它变成了:

    Passport.authenticate('local', err => {
    

    2) 我碰巧有多个 Passport 策略,每个策略都在各自的文件中(一个用于登录,一个用于注册)。要使用正确的“本地”,我必须在我的 auth.js 文件中导入正确的。很简单,就是

    const passport = require('../Passport/local-signup');
    

    对于登录,这将是一个不同的文件。

    【讨论】:

      猜你喜欢
      • 2020-07-08
      • 2018-07-09
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多