Node.js似乎没有记住我的会话。
我使用Express 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
并正确显示。
但是,相反,我收到了未定义的消息......
按照@tiblu的建议 编辑 cookie: {secure: false}
。我收到此错误:TypeError: Secret string must be provided.
。
答案 0 :(得分:1)
在您的会话中间件设置更改为:
cookie: {secure: true}
至
cookie: {secure: false}
标记为安全的Cookie不会针对非HTTPS请求发送。您正在通过HTTP访问您的应用程序。
答案 1 :(得分:1)
我设法修复了TypeError: Secret string must be provided.
- app.use(cookieParser({
- secret: 'derma-aid'
- }));
+ app.use(cookieParser(
+ 'derma-aid'
+ ));