所以我基本上想要使用会话来存储用户名并检查用户是否登录。如果没有,页面将重定向到登录页面。
我正在使用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){
为什么会发生这种错误?会话不是整个应用程序的全局?或者我在这里完全错过了一些东西。
提前致谢!
答案 0 :(得分:71)
如果您在设置Cookie和会话处理的行之前执行app.use(app.router)
,请尝试将其移至其后。这为我解决了同样的问题。
答案 1 :(得分:4)
我过去几个小时试图解决完全相同的问题。
尝试初始化您的服务器:
var app = express.createServer(
express.cookieParser(),
express.session({ secret: "crazysecretstuff"})
);
这应该有效。
答案 2 :(得分:0)
我遇到了同样的问题,即我知道设置好的会话变量未定义。
在我的情况下,结果是由交叉原始请求引起的,我忘记了请求中的withCredentials标题。
所以例如在我的客户端Angular app我需要这样做:
var config = { withCredentials: true };
return $http.get(appConfig.apiUrl + '/orders', config);
并在Express中:
res.header('Access-Control-Allow-Credentials', true);
答案 3 :(得分:0)
配置中的sessionSecret
(config.json?)应该是非空的:
sessionSecret: "something other than an empty string",