Я пытаюсь осуществить экспресс и паспортные сессий, как так:ExpressJS создает новую сессию на каждой смене страницы
app.use(connect.bodyParser());
app.use(express.cookieParser());
app.use(express.session({
cookie: {
path: "/",
httpOnly: true,
maxAge: null
},
store: redisStoreConnect,
secret: "something",
key: 'pksy.sid'
}));
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser (user, done) ->
done null, user.email
return
passport.deserializeUser (email, done) ->
User.findOne
email: email
, (err, user) ->
done err, user
return
return
Если я перейти на страницу на моем сайте, новая сессия создается и хранится в Redis. Если я обновляю эту страницу, сессия, похоже, сохранится. Если я перейду к новой странице или даже если я закрою вкладку и снова откроюсь на той же странице, будет создан новый сеанс.
Это особенно неприятно, поскольку паспорт только подтверждает подлинность сеанса, который был сгенерирован для моей страницы входа. Как заставить мои сеансы сохраняться на разных страницах?
Обновление: Спасибо @robertklep за то, что напомнили мне, чтобы проверить, какой файл cookie был отправлен обратно (что я должен был сделать, чтобы начать). Оказывается, браузер отправляет обратно правильный файл cookie, и аутентификация работает. Сеансы на самом деле сохраняются, но по какой-то причине новый сеанс (не используемый браузером) создается с каждым запросом страницы. Как я могу остановить это?
Как настроить паспорт? Кроме того, помогает ли вам установить maxAge значение тайм-аута (количество миллисекунд, сеанс может быть действительным)? – robertklep
Я установил maxAge на 604800000, и ошибка остается. Это единственные две паспортные строки, которые, я думаю, повлияют на работу сессии. Помимо них я просто использую локальную стратегию и анонимную стратегию. –
Вы также используете 'passport.serializeUser()' и 'passport.deserializeUser()'? – robertklep