Подтвердить что ты не робот

Как использовать сеансы в express, couchDB и node.js

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

Я использую 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){

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

Спасибо заранее!

4b9b3361

Ответ 1

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

Ответ 2

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

Попробуйте инициализировать свой сервер следующим образом:

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

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

Ответ 3

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

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

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

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

и в Express:

res.header('Access-Control-Allow-Credentials', true);

Ответ 4

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

sessionSecret: "something other than an empty string",