Я делаю регистрацию формы с помощью passportJs и всегда возвращает failRedirect. У меня есть поиск в переполнении стека для этой проблемы, но у меня нет правильного ответа. Вот мой код:Nodejs - аутентификация паспорта всегда возвращает отказ перенаправления
Форма изготовления формы нефрита:
form(method='post', action='/users/login', enctype='multipart/form-data') .form-group label Username input.form-control(name='username', type='text' placeholder='Enter Username') .form-group label Password input.form-control(name='password', type='password' placeholder='Enter password') input.btn.btn-default(name='submit', type='submit', value='Login')
маршрутизатор Hanlde использует экспресс рамки формы Nodejs и паспортный промежуточное программное обеспечение:
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.getUserById(id, function(err, user) {
done(err, user);
});
});
passport.use(new LocalStrategy({
usernameField: 'username',
passwordField: 'password'
},
function(username, password, done) {
User.getUserByUsername(username, function(err, user) {
if (err) throw err;
if (!user) {
console.log('Unknown User');
return done(null, false, {
message: 'Unknown User'
});
}
User.comparePassword(password, user.password, function(err, isMatch) {
if (err) throw err;
if (isMatch) {
return done(null, user);
} else {
console.log('Invalid Password');
return done(null, false, {
message: 'Invalid Password'
});
}
});
});
}
));
router.post('/login', passport.authenticate('local', {
failureRedirect: '/users/login',
failureFlash: 'Invalid username or password'
}), function(req, res) {
console.log('Authentication Successful');
req.flash('success', 'You are logged in ');
res.redirect('/');
});
Вы можете разделить коды для '' функций comparePassword' getUserByUsername' и? – Raeesaa
@ user2235057 Да: я пишу его в папку модели, файл user.js: module.exports.getUserByUsername = функция (имя пользователя, обратный вызов) { \t вар запрос = {имя пользователя: имя пользователя}; \t User.findOne (запрос, обратный вызов); } module.exports.getUserByUsername = function (имя пользователя, обратный вызов) { \t var query = {имя пользователя: имя_пользователя}; \t User.findOne (запрос, обратный вызов); } –
Это полный код для функции 'getUserByUsername'? Если это так, в этой функции есть проблема. Коды должны были быть примерно такими: module.exports.getUserByUsername = function (имя пользователя, callback) {var query = {имя пользователя: имя_пользователя}; User.findOne (запрос, функция (err, user) {callback (err, user)}); }, и вы не использовали функцию comparePassword, поэтому я не уверен, что это правильно. – Raeesaa