【发布时间】:2016-06-25 00:17:32
【问题描述】:
所以我遇到了使用本地策略进行身份验证的问题。如果我传递了无效的凭据或任何不成功的东西,我会收到相应的错误。但是,如果他们的身份验证成功,则会出现 404 错误。
我已经挖掘了,我遇到的最好的想法是删除会话存储(这似乎是它发生的地方,同时序列化用户)。有人遇到过这样的问题吗?
这是一些代码,如果您需要任何其他代码部分,请告诉我,我很乐意提供。
我的护照配置:
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) 发生了一些事情。我尝试过它,但我最终进入的内容似乎相当模糊(或者我太笨了无法理解它)所以我不知道实际发生了什么。
【问题讨论】:
-
听起来对
passport.authenticate()的调用可能配置不正确。你能展示一下你是如何使用它的吗? -
我在那里没有做任何特别的事情:
app.route('/login') .post(passport.authenticate('local'));我不需要做任何重定向或任何事情,我只需要将用户对象返回到前端。一件事可能完全是巧合,最近节点加密pbkdf2Sync函数开始抱怨不推荐在没有摘要的情况下调用它,所以我添加了它,现在我遇到了这个问题。 --edit 刚刚测试过了,还是一样的……
标签: node.js authentication passport.js passport-local