Javascript 注册passport本地注册例程出错

Javascript 注册passport本地注册例程出错,javascript,node.js,passport.js,passport-local,Javascript,Node.js,Passport.js,Passport Local,我正在节点中构建一个应用程序,使用Passport和本地注册和登录策略。我只是不断遇到一个问题。所有需要的模块等都在那里。以下签到例行工作正常: passport.use('local-signin', new LocalStrategy({ usernameField : 'email', passwordField : 'password', passReqTodone : true }, function(req, email, password, done) {

我正在节点中构建一个应用程序,使用Passport和本地注册和登录策略。我只是不断遇到一个问题。所有需要的模块等都在那里。以下签到例行工作正常:

passport.use('local-signin', new LocalStrategy({
    usernameField : 'email',
    passwordField : 'password',
    passReqTodone : true
}, function(req, email, password, done) {
    User.findOne({ 'local.email' :  email }, function(err, user) {
        if (err)
            return done(err);

        if (!user)
            return done(null, false, req.flash('message', 'User not found.'));

        if (!user.validPassword(password))
            return done(null, false, req.flash('message', 'Wrong password.'));

        return done(null, user);
    });

}));
但是,以下注册程序不适用:

passport.use('local-signup', new LocalStrategy({
    usernameField : 'email',
    passwordField : 'password',
    passReqTodone : true
}, function(req, email, password, done) {
    console.log("signing up")
    User.findOne({ 'local.email' : email }, function(err, user) {
        if (err) {
            return done(err);
        } else if (user) {
            return done(null, false, req.flash('message', 'That email address is already registered.'));
        } else {
            var newUser = new User();
        }

        // save the user
        newUser.save(function(err) {
            if (err) {
                console.log("Error saving new user profile: " + err);
            } else {
                return done(null, newUser, req.flash('message', 'User account created'));
            }
        });
    });
}))
这两个例程都在routes.js中调用:

// POST :   SIGNUP
app.post('/signup', passport.authenticate('local-signup', {
    successRedirect: '/',
    failureRedirect: '/error',
    failureFlash: true
}));

// POST :   SIGNIN
app.post('/signin', passport.authenticate('local-signin', {
    successRedirect: '/profile',
    failureRedirect: '/',
    failureFlash: true
}));

你知道哪里会出错吗?按原样,持续发布/注册会导致失败重定向。我的头因为敲击屏幕而有点痛…

使用此代码,它将帮助您解决问题

passport-authentication.js

verify.js


希望这对您有所帮助……

您唯一需要改变的是:

if (!user.validPassword(password))

我知道,如果!user.validPasswordpassword在Passport.js官方文档的示例中,但它是错误的


我刚刚失去了两个小时的生命,我明白了这一点。

错误消息是什么?嗨,Myonara,我没有收到错误消息-我的日志只显示“get/”,这是因为failureRedirect;我尝试在例程中使用控制台日志记录,但它似乎对此没有响应。这有点奇怪;它正在寻找本地注册策略,但在该策略中不响应控制台日志记录。任何想法都非常感谢!你收到console.Log注册消息了吗?顺便说一句,a;那里不见了。如果你得到这个控制台,添加额外的console.log来调试…嗨,Myonara,谢谢你的回复!并对我迟来的答复表示歉意;没有显示我的console.log-它调用常规passport。使用“local-signup”,但在该代码块内似乎没有做任何事情…Hi Syed,感谢您的建议;虽然我确信我可以复制/粘贴其中的大部分内容,但这并不能帮助我理解代码中的错误所在-就我所知,它应该可以正常工作,但显然不是…@Martin你为什么不使用我提供给你的完整代码。在我的代码中我也使用passport身份验证。你还期待什么?谢谢你的代码,但我正在努力理解例程的机制,特别是因为我的其余代码和文件的结构和组织非常不同,因此我更愿意了解正确的语法以及如何正确实现和调用正确的函数。再次感谢!如果您对我的原始代码不起作用的原因有任何建议,我会非常有兴趣听取他们的意见:所以您想了解语法以及每种语法。为此,请注册coursera网站,您可以使用nodejs、Express和MongoDB搜索服务器端开发。你可以观看教授讲解的所有视频。你会明白的。嗨,赛义德,我想你没抓住重点。我学习过Node.js和Mongo,但并没有严格学习Passport之类的中间件。与其复制/粘贴别人的代码,我更感兴趣的是理解为什么我的代码不起作用,特别是因为我已经参加了一门课程,一丝不苟地遵循了所有内容,但它似乎仍然不起作用。我想了解我的错误,成为一名更好的程序员。
var User = require('../models/user');
var jwt = require('jsonwebtoken'); // used to create, sign, and verify tokens
var config = require('../config.js');

exports.getToken = function (user) {
    return jwt.sign(user, config.secretKey, {
        expiresIn: 3600
    });
};

exports.verifyOrdinaryUser = function (req, res, next) {
    // check header or url parameters or post parameters for token
    var token = req.body.token || req.query.token || req.headers['x-access-token'];

    // decode token
    if (token) {
        // verifies secret and checks exp
        jwt.verify(token, config.secretKey, function (err, decoded) {
            if (err) {
                var err = new Error('You are not authenticated!');
                err.status = 401;
                return next(err);
            } else {
                // if everything is good, save to request for use in other routes
                req.decoded = decoded;
                next();
            }
        });
    } else {
        // if there is no token
        // return an error
        var err = new Error('No token provided!');
        err.status = 403;
        return next(err);
    }
};
if (!user.validPassword(password))
if (user.validPassword(password) === false)