Node.js会话登录

时间:2016-07-12 10:25:21

标签: node.js session express

Node.js似乎没有记住我的会话。

我使用Express cookie-parserexpress-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并正确显示。

但是,相反,我收到了未定义的消息......

按照@tiblu的建议

编辑 cookie: {secure: false}。我收到此错误:TypeError: Secret string must be provided.

2 个答案:

答案 0 :(得分:1)

在您的会话中间件设置更改为: cookie: {secure: true}cookie: {secure: false}

标记为安全的Cookie不会针对非HTTPS请求发送。您正在通过HTTP访问您的应用程序。

更多阅读https://en.wikipedia.org/wiki/HTTP_cookie#Secure_cookie

答案 1 :(得分:1)

我设法修复了TypeError: Secret string must be provided.

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