Passportjs забывает зарегистрированного пользователя после второго обновления

#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 .