【问题标题】:Using cookieSession with Passport将 cookieSession 与 Passport 一起使用
【发布时间】:2013-10-01 10:26:56
【问题描述】:

我想将 cookie 会话存储与 Passport 一起使用,因为内存存储不是为生产设计的:

Warning: connection.session() MemoryStore is not
designed for a production environment, as it will leak
memory, and will not scale past a single process.

这是我的 Express 初始化:

app.use(express.bodyParser({keepExtensions:true}));
app.use(express.cookieParser(cookieSecret));
app.use(express.cookieSession({ 
    key: cookieKey,
    secret: cookieSecret,
    maxAge: sessionTimeout
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.methodOverride());
app.use(express.static(__dirname + '/public'));

如果我将express.cookieSession 更改为express.session,一切正常。当使用cookieSession 时,用户登录成功,但在下一页加载后用户不再登录。任何提示如何使护照与 cookie 会话一起工作?

我正在使用 Express 3.0.0

【问题讨论】:

    标签: node.js session cookies express passport.js


    【解决方案1】:

    cookieSession 的初始化不正确。试试这个:

    app.use(express.cookieSession({ 
      key    : cookieKey,
      secret : cookieSecret,
      cookie : {
        maxAge: sessionTimeout
      }
    }));
    

    另外,请确保 sessionTimeout 以毫秒为单位。

    【讨论】:

    • 谢谢,但没有帮助:\
    • @MattiLehtinen 很好,它有可能让它工作,我自己使用它:) 也许你可以使用你的浏览器开发工具来查看浏览器和服务器之间来回发送的内容饼干之类的。
    • 我正在通过 ajax POST 调用进行身份验证,尽管返回以下内容,但似乎浏览器没有设置 cookie:Set-Cookie:local.sess=s%3Aj%3A%7B%22passport%22%3A%7B%22user%22%3A5%7D%7D.OPxdoZ1oPKboHJEhz7uSPJiBxSIRavEByC7f1yEn1Xc; Path=/; Expires=Thu, 17 Oct 2013 16:09:36 GMT; HttpOnly 我的服务器在 localhost:3000 上运行,并且 JS 客户端是从同一台服务器。
    • @MattiLehtinen 你觉得到期时间好吗?另外,您是否使用跨域 AJAX 请求?如果是这样,您是否启用了withCredentials
    【解决方案2】:

    我知道这是旧的,但我遇到了同样的问题。结果你不需要(事实上你不能)在 cookieParser 和 cookieSession 中设置 secret 选项。

    在我自己的帖子中查看我的答案:https://stackoverflow.com/a/30109922/3500059

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-23
      • 2016-06-09
      • 2014-12-29
      • 1970-01-01
      • 2013-05-04
      • 2012-05-31
      • 2019-06-03
      • 2017-08-13
      相关资源
      最近更新 更多