2013-10-14 2 views
2

Я считаю, что правильно настроили все:Узел паспорта сессии потерял на последующих вызовах

app.configure(function() { 
    app.use(express.cookieParser('secret message')); // secret it set here in new version of express or connect 
    app.use(express.bodyParser()); 
    app.use(express.session()); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
}); 

Когда делается запрос на «Войти» с правильными учетными данными:

app.post('/api/login', passport.authenticate('local'), function (req, res, next) { 
    console.log(req.session.passport); // {"user":"5259f2739d4323000a000003"} 
}); 

req.session.passport Заселено:

"passport": {"user":"5259f2739d4323000a000003"} 

Однако, когда вызов на:

app.post('/api/checklogin', function (req, res, next) { 
    console.log(req.session.passport); // {} 
}) 

req.session.passport теряется:

"passport":{} 

Оба раза, req.session выглядит следующим образом:

{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"passport":{}} 

** объект Passport является очевидно, разные, хотя, как описано выше

Я предполагаю, что правильно настроил serializeUser, потому что он правильно устанавливает это свойство.

Я не совсем уверен, как Passport создает сеансовые куки и как эти cookie-файлы могут сохраняться.

Я предполагаю, что req.session.passport предполагается сохранить свойства пользователя, но, кажется, что объект паспорта либо:

  1. возвратов на каждом вызове
  2. не сохраняет свойство Passport в сессии
  3. Сессия никогда не создавалась

Я боюсь, что, возможно, я пропущу что-то большое - возможно, что-то, что мне может понадобиться, чтобы сделать этот паспорт Не обращайся напрямую для меня.

Я не знаю ни одного способа проверить, создан ли сеанс паспортом.

Любые советы или помощь действительно оценены. Это была многодневная борьба.

+0

Можете ли вы показать свое 'deserializeUser'? – robertklep

ответ

5

Вы используете настройку кластера? Если это так, вам нужно прекратить использовать значение по умолчанию MemoryStore и переключиться на что-то вроде connect-redis, поэтому разные экземпляры вашего приложения могут получить доступ к общим данным сеанса.

+0

Я не использую кластерную установку, не так ли? Почему память MemoryStore по умолчанию не работает. Я не верю, что создаю больше одного экземпляра. – TaylorMac

+0

Спасибо, что вам помогли. Jared – TaylorMac

+3

Не могли бы вы объяснить, в чем была проблема? Я столкнулся с одной и той же проблемой, однако переход в магазин Redis не решает проблему. Функция 'deserializeUser' по-прежнему никогда не вызывается при последовательных вызовах, и свойство' pass' для сеанса не восстанавливается из ранее сериализованного значения. –

Смежные вопросы