为什么Passport JS中的自定义回调不起作用?

时间:2018-06-06 07:48:24

标签: javascript mongodb express passport.js

我正在尝试让用户注册我的网站,并将凭据存储在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);
}

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

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没有被调用,但我不确定为什么。如有必要,我可以发布其他代码片段,谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

替换' local-signup'与当地的' 所以它变成了:

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

2)我碰巧有多个Passport策略,每个都在自己的文件中(一个用于登录,一个用于注册)。要使用正确的"本地"我必须在我的auth.js文件中导入正确的一个。很容易,它的

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

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