因此,我遇到了使用本地策略进行身份验证的问题。如果我传递无效凭据或任何不成功的,我会收到相应的错误。但是,如果他们的身份验证成功,那么我就会出现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;我太傻了,无法理解)所以我无法说出实际发生了什么。
答案 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'));