В настоящее время я занимаюсь разработкой узла / экспресс-сервера, и я решил использовать passport-local для аутентификации пользователя вместе с локальным сервером MongoDB. Я использую метод POST из HTML-формы для отправки двух элементов, электронной почты и пароля (я изменил элемент usernameField в моем экземпляре LocalStrategy). Используя console.log, я видел все правильное и ожидаемое поведение от Mongo и Passport. Однако страница никогда не перенаправляется с successRedirect или failRedirect. Похоже, HTML-страница (Login.html) просто обновляется. Интересно, что я получаю различное поведение в зависимости от того, как я решу сделать запрос POST из формы. Первоначально я использовал jQuery и метод $ ('# id'). Submit () для вызова запроса $ .post в '/ Students', и я наблюдал поведение, упомянутое выше. Однако, когда я избавился от этого сценария и использовал его для отправки запроса, промежуточное программное обеспечение не вызывалось (опять же, я подтвердил это с помощью console.log), и страница немедленно перенаправлялась на мой URL-адрес faultRedirect, независимо от того, был ли введен верный данные в форме.
Примечание: «Студент» - это название моей модели мангуста, проблема не в этом
Вещи, которые я уже пробовал:
1. Использование пользовательского обратного вызова с моим passport.authenticate и использование res.redirect. Фактически, я поместил console.log внутри этой функции, чтобы увидеть, была ли она вызвана, и была ли она. Но распаковка res.redirect не сработала.
2. Избавление от моих пользовательских usernameField и passwordField и просто использование по умолчанию. Я наблюдал точно такое же поведение.
3. Использование метода jQuery .click () вместо метода .submit (). Я думал, что отправка формы связана с обновлением страницы, но это не сработало.
Вещи, которые я думаю, могут помочь, но я не знаю, как реализовать:
1. Изменение порядка всех моих серверных Javascript (возможно, что-то вызывается неправильно)
2. Я видел где-то, что passport.authorize использовался вместо passport.authenticate
В app.js
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
(username, password, done) => {
console.log(username, password);
Student.findOne({ email: username, password:password }, function(err, user) {
console.log(user); //this works as expected
console.log(!user); //this works as expected
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (user.password != password) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
Student.findById(id, function(err, user) {
done(err, user);
});
});
app.post('/students', passport.authenticate('local', {
successRedirect:'/public/Schedule.html',
failureRedirect:'/'
}));
В теге сценария Login.html
$('#loginForm').submit(() => {
let currentUser = {
email: $('#email').val(),
password: $('#password').val()
}
checkForUser(currentUser);
});
function checkForUser(user) {
$.post('http://localhost:9000/students',user, (data) => {
console.log(data);
})
}