我尝试使用passport-local
将一些身份验证和密码哈希烘焙到一个小型网络应用中。我相信我已经正确设置了它,但是我通过失败重定向再次登录,即使凭据是正确的110%。
护照文档对调试错误非常轻松,任何人都可以分享这个故障重定向的可能原因,或提供继续调试的解决方案吗?
Passport配置
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
function(username, password, cb) {
UserSchema.findByUsername(username, function(err, user) {
if (err) { return cb(err); }
if (!user) { return cb(null, false); }
if (user.password != password) { return cb(null, false); }
return cb(null, user);
});
}));
登录路线
router.post('/login',
passport.authenticate('local', {
failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
架构和findByUsername函数
const UserSchema = mongoose.Schema ({
firstName: {
type: String,
index: true
},
lastName: {
type: String,
index: true
},
email: {
type: String,
index: true
},
password: {
type: String,
index: true
},
homeAirport: {
type: String,
index: true
}
})
UserSchema.plugin(passportLocalMongoose)
// Adding this function to find by username
exports.findByUsername = function(username, cb) {
process.nextTick(function() {
for (var i = 0, len = records.length; i < len; i++) {
var record = records[i];
if (record.username === username) {
return cb(null, record);
}
}
return cb(null, null);
});
}
// Export it to the app
module.exports = mongoose.model('user', UserSchema)
答案 0 :(得分:0)
取自Passport文档:
重定向通常在验证请求后发出。
我猜是因为你只有一个{failureRedirect: '/login' }
你总是被重定向到那里。尝试添加:
app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login' }));
因此,在这种情况下,您有successRedirect
和failureRedirect
或者您也可以在身份验证后删除重定向,而是重定向用户,如下所示:
app.post('/login',
passport.authenticate('local'),
function(req, res) {
console.log('Successfully logged in');
res.redirect('/users/' + req.user.username);
});
让我知道这是否有效