2014-11-29 2 views
0

Я до сих пор довольно новичок в узле и экспериментирую с управлением сеансом с помощью express + redis.NodeJS Redis Session не сохраняется на переадресации браузера

Мой текущий проект требует, чтобы пользователь перенаправлялся на внешний сайт для аутентификации. После аутентификации браузер перенаправляется на URL-адрес обратного вызова, который я указал. Я требую, чтобы данные сеанса сохранялись в перенаправлении.

Моя реализация выглядит следующим образом:

  1. Пользователь запускает POST вызов к серверу nodeJS, где сохраняются данные для сессии req.session.foo = 'bar', а затем возвращать auth_url в браузер.
  2. браузер перенаправляет с помощью window.location.replace(auth_url); на внешний сайт для аутентификации
  3. После аутентификации браузер перенаправляется на localhost:3000/mycallbackurl, который является маршрутом определено ниже (простите за плохое форматирование):

router.get ('/ mycallback ', function (req, res) {

console.log("data at callback: " + req.session.foo); 
    //do other stuff 

});

Моя проблема в том, что консоль печатает: data at callback: undefined по маршруту обратного вызова.

Это проблема с моей настройкой redis, или я просто что-то пропустил здесь?

До сих пор я убедился, что redis работает, увеличивая значение, сохраненное в req.session, при каждом обновлении браузера и его печати.

Моя установка Redis выглядит следующим образом:

var session = require('express-session'); 
var RedisStore = require('connect-redis')(session); 
app.use(cookieParser()); 
app.use(session({ store: new RedisStore({ 
    host: 'localhost', 
    port: 6379, 
    db: 1, 
    cookie: { maxAge: (24*3600*1000*30)}, 
}), secret: 'keyboard cat', 
    saveUninitialized: true, 
    resave: true 
})); 

Спасибо за чтение и с нетерпением жду ваших ответов!

ответ

0

После перенаправления (res.redirect) объекты res и req воссоздаются. Это означает, что если вы добавили какие-либо параметры к этим объектам, вы должны быть уверены, что они повторно добавляются в объекты req или res по каждому запросу.

+0

Я использую Redis для сохранения данных на диск, а затем доступа к этим данным после перенаправления. Является ли моя реализация неправильной? Спасибо за ваш ответ! – garrethp

+0

Я имею в виду, что вам нужно переназначить значение для req.session.foo для каждого запроса. Не имеет значения, исходит ли это значение от Redis или в другом месте. Я смотрю на ваш код, и я не вижу никакого назначения значения для req.session.foo, поэтому он будет не определен, когда вы ссылаетесь на него. – takinola

+0

Спасибо за ваш ответ еще раз. В маршруте обратного вызова мне нужны данные, которые ранее были в 'req.session.foo'. Как я могу сохранить данные и получить их после перенаправления? Неужели Редис может помочь мне в этом? – garrethp

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