【问题标题】:Manually setting session ID in Express在 Express 中手动设置会话 ID
【发布时间】:2013-12-02 08:54:48
【问题描述】:

我有一个 Angular/Express 应用程序,并且正在尝试实现某种宁静的身份验证。 Express 应用程序具有 Passport 标准用户名/密码登录和 Redis 会话。成功登录后,我返回会话 ID 和角度,然后将其发送到标头中的每个请求。问题是我不知道如何让 Express 使用它作为会话 ID。我曾尝试在中间件中写入 req.sessionId ,但没有成功。

如何使用标头或查询字符串作为发送会话 ID 的一种方式。

【问题讨论】:

  • 我猜,当 Angular 获得 sessionId 时,它将随每个请求一起发送,很可能作为 cookie 标头。您如何检查角度请求是否到达了包含 sessionId 的快速服务器?如果请求延长了快速 sessionTimout,我建议您测量一下,也许一切都已经正常了。
  • @angabriel 使用 cookie/会话可以正常工作 - 但我正在探索替代方案,因为我想在跨域上进行身份验证 - 我可以获得会话 ID,但似乎无法使用其他方式来设置它

标签: javascript angularjs node.js express passport.js


【解决方案1】:

我遇到了同样的问题。这似乎对我有用,试试看,如果它对你有用,请告诉我:

app.use(function (req, res, next) {
    // I'm pulling it from the query string. You could use headers.
    if (req.query.session) {
        req.sessionID = req.query.session;
        req.sessionStore.get(req.query.session, function (err, sess) {
            // This attaches the session to the req.
            req.sessionStore.createSession(req, sess);
            next()
        })
    } else {
        next()
    }
})

缺点是它确实获得了两次会话。我应该写一个会话处理程序的子类,但我现在很懒。

更新: 我决定不再懒惰并分叉快速会话。我提交了一个拉取请求,但在那之前你可以找到它here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 2016-12-11
    • 2011-10-23
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    相关资源
    最近更新 更多