#jquery #node.js #express #passport.js
#jquery #node.js #экспресс #passport.js
Вопрос:
Я взял этот пример.(простая проверка подлинности узла)Я изменил некоторые вещи для разработки одной страницы, поэтому я создаю post-запрос с помощью JQ:
$(document).on('click','#submitLoginIDButton ', function (){
$.post( "/login", { "email" : $("#emailLoginID").val(), "password" : $("#passwordLoginID").val() })
.done(function( data ) {
console.log(data);
});
});
Измените некоторые маршруты на следующие:
app.get('/',
function(req, res) {
if (req.user) {
var logged = true;
} else {
var logged = false;
}
res.render('index.ejs', {
title : "No More Miss",
userStatus : logged
});
});
app.post('/login',
passport.authenticate('local-login'),
function(req, res) {
res.send({ status: 'OK', user: req.user });
});
Вход в систему работает, и если я обновлю его, покажу, что я вошел в систему, но после второго обновления он потерян, есть идеи, почему это происходит?
Ответ №1:
Вы активировали сеанс passport? Если вы не инициализируете его, информация об авторизации будет потеряна после обновления страницы.
Из passport.js страница настройки :
Если ваше приложение использует постоянные сеансы входа, необходимо также использовать промежуточное программное обеспечение passport.session().
app.use(express.cookieParser());
app.use(express.session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());
Обратите внимание, что включение поддержки сеансов является полностью необязательным, хотя это
рекомендуется для большинства приложений. Если включено, обязательно используйте
express.session() перед passport.session(), чтобы убедиться, что сеанс входа
в систему восстановлен в правильном порядке.
Комментарии:
1. сеансы включены и инициализированы, как вы написали, и промежуточное программное обеспечение существует, isLoggedIn, из примера в файле app/routes.js . Результат остается тем же.
2. Как упоминалось @Waldo, все то же самое, но ошибка по-прежнему сохраняется.
Ответ №2:
Просто установите resave
для свойства значение false
.
app.use(session({ secret: 'keyboard cat', resave: false }))
Я не знаю, в чем причина этой проблемы, но в любом случае это работает.
Попробуйте прочитать больше информации на https://github.com/expressjs/session#resave .