как использовать сессии в Express, couchDB и node.js - PullRequest
23 голосов
/ 08 апреля 2011

, поэтому я в основном хочу использовать сеансы для хранения имени пользователя и проверки, вошел ли пользователь в систему или нет.Если нет, страница будет перенаправлена ​​на страницу входа.

Я использую Node.js, express и couchDB.

Вот как я сейчас настроил свою сессию

var MemoryStore = require('connect').session.MemoryStore;
app.use(express.cookieParser());
app.use(express.session({ 
    secret: "keyboard cat", 
    store: new MemoryStore({ 
        reapInterval: 60000 * 10
    })
}));

Чтобы что-то сохранить в сеансе, я использую следующий код, верно?

req.session = {user:name);

Таким образом, переменная сеанса работает на моей странице входа.Я успешно сохраняю имя пользователя в сеансе. Однако, когда я пытаюсь получить доступ к переменной сеанса на другой странице, она выдает мне ошибку

Cannot read property 'user' of undefined

Все, что я делаю, это:

if (req.session.user){

Почему происходит эта ошибка?сеансы не являются глобальными для всего приложения?Или я что-то здесь упускаю.

Заранее спасибо!

Ответы [ 4 ]

71 голосов
/ 09 апреля 2011

Если вы делаете app.use(app.router) перед строками, которые устанавливают cookie и обработку сеанса, попробуйте переместить его после них. Это решило ту же проблему для меня.

4 голосов
/ 09 апреля 2011

Я пытался решить ту же самую проблему за последние несколько часов.

Попробуйте инициализировать ваш сервер так:

var app = express.createServer(
express.cookieParser(),
express.session({ secret: "crazysecretstuff"})
  );

Это должно работать.

0 голосов
/ 15 июля 2014

sessionSecret в конфигурации (config.json?) Должен быть непустым:

sessionSecret: "something other than an empty string",

0 голосов
/ 11 марта 2014

У меня была та же проблема получения неопределенной переменной сеанса, которая, как я знал, была установлена ​​нормально.

В моем случае это оказалось вызвано запросом кросс-источника, я забыл заголовок withCredentials в запросе.

Так, например, в моем клиентском приложении Angular мне нужно было сделать это:

var config = { withCredentials: true };
return $http.get(appConfig.apiUrl + '/orders', config);

и в Express это:

res.header('Access-Control-Allow-Credentials', true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...