【问题标题】:how to use sessions in express, couchDB, and node.js如何在 express、couchDB 和 node.js 中使用会话
【发布时间】:2011-04-08 18:09:21
【问题描述】:

所以我基本上想使用会话来存储用户名并检查用户是否登录。如果没有,页面将重定向到登录页面。

我正在使用 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){

为什么会发生这个错误?会话对整个应用程序不是全局的吗?还是我在这里完全遗漏了什么。

提前致谢!

【问题讨论】:

  • 代码中的req.session = {user:name); 部分不再正确。我认为这适用于旧版本的 express,但现在为避免错误,您需要使用 req.session.user=name;。如果不这样做,req.session 上的方法将被覆盖。

标签: javascript session node.js express


【解决方案1】:

如果您在设置 cookie 和会话处理的行之前执行 app.use(app.router),请尝试将其移至它们之后。这为我解决了同样的问题。

【讨论】:

  • 好的,是的。现在一切正常。不知道为什么不早点。非常感谢大家!
  • 在需要帮助时加入其他偶然发现您的答案的人...谢谢!
  • @Ernesto11 你应该给它一个绿色检查:) 它也对我有用
  • 我没有工作。只有将它添加到 express.createServer() 调用似乎才能实现:-/
  • 澄清一下,我遇到了同样的问题,但这根本不能解决这个问题。但我发现您必须按顺序将 cookieParser、会话和路由器放在配置的末尾。希望有人能提供更多帮助!
【解决方案2】:

在过去的几个小时里,我试图为他解决完全相同的问题。

尝试像这样初始化您的服务器:

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

应该可以的。

【讨论】:

  • 我试过了,还是不行。为什么我必须像那样初始化我的服务器?它在明确的文档中说要使用
  • app.use(express.cookieParser()); app.use(express.session({ secret: "keyboard cat" }));
  • 两者都是使用 express.js 初始化中间件的有效方法。对我来说唯一的区别是会话只有在我在 app.createServer 中初始化它们时才起作用。可能是一个错误。
  • 为我工作,谢谢。恕我直言,主要思想是在所有其他“使用”之前“使用()”cookieParser和会话。我的代码:var app = express.createServer(); app.use(express.cookieParser()); app.use(express.session({ secret: 'secret key' })); app.use(express.bodyParser());
【解决方案3】:

我遇到了同样的问题,即我知道设置正确的会话变量未定义。

在我的情况下,它原来是由跨源请求引起的,我忘记了请求上的 withCredentials 标头。

例如,在我的客户端 Angular 应用程序中,我需要这样做:

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

在表达这个:

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

【讨论】:

    【解决方案4】:

    配置中的sessionSecret (config.json?) 应该是非空的:

    sessionSecret: "something other than an empty string",

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 2013-03-10
      相关资源
      最近更新 更多