NodeJS,Passport&护照,当地

时间:2016-06-23 20:01:55

标签: node.js authentication passport.js passport-local

因此,我遇到了使用本地策略进行身份验证的问题。如果我传递无效凭据或任何不成功的,我会收到相应的错误。但是,如果他们的身份验证成功,那么我就会出现404错误。

我已经挖过了,我遇到的最好的想法是丢弃会话存储(这是它似乎正在发生的地方,同时序列化用户)。有人遇到这样的问题吗?

这里有一些代码,如果您需要其他任何代码段,请告诉我,我很乐意提供。

我的Passport配置:

var passport = require('passport'),
User = require('mongoose').model('User');

module.exports = function () {
    passport.serializeUser(function (user, done) {
        done(null, user.id);
    });

    passport.deserializeUser(function (id, done) {
        User.findOne({ _id: id }, '-password -salt -__v', function (err, user) {
            done(err, user);
        });
    });

    require('./strategies/local')();
};

我的本​​地策略配置:

var passport = require('passport'),
    LocalStrategy = require('passport-local').Strategy,
    User = require('mongoose').model('User');

module.exports = function () {
    passport.use(new LocalStrategy({
        usernameField: 'email'
    }, function (email, password, done) {
        User.findOne({email: email}, function (err, user) {
            if (err) {
                return done(err);
            }

            if(!user || !user.active || !user.authenticate(password)) {
                return done(null, false, { message: 'Authentication Failed'});
            }

            return done(null, user);
        });
    }));
};

所有其他方法都有效,我可以查询数据库以找到用户,我已经逐步将散列密码与提供的密码匹配,这一切似乎都很好,我在LocalStrategy结束时得到了一个用户(我把它变成最后的done(null, user)。在serializeUser() done(null, user.id)发生了一些事情。我已经试过踩过它,但我最终进入的东西看起来相当混淆(或者我&# 39;我太傻了,无法理解)所以我无法说出实际发生了什么。

1 个答案:

答案 0 :(得分:1)

这是您的路线设置:

5005284;5003485;C1 C2;A00.00;10-11-01;NULL;1;
2006483;2003855;this is some text and some 787 or even &[]\><;A87.03;30-09-86;NULL;1;
2006485;2003855;C;K86.00;31-12-91;NULL;1;

当验证失败时,这将生成401(&#34;未授权&#34; ),但是当它成功时,接下来没有配置任何配置,所以你&#39 ;得到404。

你应该添加一个明确的&#34;成功&#34;你的路线的处理程序:

app.route('/login').post(passport.authenticate('local'));