2016-07-12 4 views
0

Node.js похоже не помнит мою сессию.Node.js session login

Я использую экспресс с cookie-parser и express-session в качестве промежуточного программного обеспечения.

В моем приложении я использую Mongo для хранения имен пользователей и паролей.

Ниже приводится MWE:

var express = require('express'); 
var cookieParser = require('cookie-parser'); 
var session = require('express-session'); 

var app = express(); 
app.use(cookieParser({ 
    secret: 'derma-aid' 
})); 
app.use(session({ 
    secret: 'derma-aid', 
    resave: false, 
    saveUninitialized: false, 
    cookie: {secure: false} 
})); 

// CORS (Cross-Origin Resource Sharing) headers to support Cross-site HTTP requests 
app.all('*', function(req, res, next) { 
    res.header('Access-Control-Allow-Origin', '*'); 
    res.header('Access-Control-Allow-Headers', 'X-Requested-With'); 
    next(); 
}); 

app.get('/login', function(req, res) 
{ 
    console.log('login'); 
    req.session.user_id = 500; 
    res.send('<h1>login</h1>'); 
}); 

app.get('/view', function(req, res) 
{ 
    console.log('view id: ' + req.session.user_id); 
    res.send('<h1>view: ' + req.session.user_id + '</h1>'); 
}); 

app.get('/logout', function(req, res) 
{ 
    console.log('logout: ' + req.session.user_id); 
    res.send('<h1>logout: ' + req.session.user_id + '</h1>'); 
    delete req.session.user_id; 
}); 

app.listen(5000); 

Если вы идете в браузере http://localhost:5000/login, то req.session.user_id должен быть установлен и правильно отображаться на http://localhost:5000/view.

Но, вместо этого, я получаю неопределенные сообщения ...

EDIT:cookie: {secure: false} как предложено @tiblu. Я получаю эту ошибку: TypeError: Secret string must be provided..

ответ

0

в сеансе промежуточного изменения настройки от: cookie: {secure: true} в cookie: {secure: false}

Печенье помеченных как безопасные не посылаются для NON-HTTPS запросов. Вы получаете доступ к своему приложению через HTTP.

Больше чтения на этом https://en.wikipedia.org/wiki/HTTP_cookie#Secure_cookie

+0

О, верно. Теперь он жалуется на 'TypeError: секретная строка должна быть предоставлена. '. –

+0

Мне удалось исправить эту ошибку, которую я получал. Это было связано с использованием 'cookieParser ({secret: 'derma-aid'})', а не просто 'cookieParser ('derma-aid')'. Я запутался, потому что большинство экспресс-библиотек используют словарь для опций. –

1

мне удалось зафиксировать TypeError: Secret string must be provided.

- app.use(cookieParser({ 
-  secret: 'derma-aid' 
- })); 
+ app.use(cookieParser(
+  'derma-aid' 
+));