【问题标题】:Expressjs cookie-session settings not working with PassportjsExpressjs cookie 会话设置不适用于 Passportjs
【发布时间】:2020-11-22 23:06:22
【问题描述】:

我正在尝试调用我的 /auth/user 端点来获取登录到我网站的当前用户。但是由于新的 Chrome 更新,我需要以某种方式设置“sameSite”和“安全”。任何人都知道我该如何解决这个问题?我在 cookie-session 上做错了吗?

cookie 可以通过 express 发送,但它没有我在 cookie 会话设置中指定的 sameSite 和安全设置(见图)。我也尝试使用 express-session,但由于某种原因,sameSite 和安全设置永远不会传播到用于 oauth 的 cookie。

顺便说一句,身份验证适用于 localhost 地址,但是当我使用 heroku 从前端和后端进行部署时,我遇到了需要设置 sameSite 的问题。设置代理或其他东西可以解决相同的站点问题吗?

【问题讨论】:

标签: express passport.js express-session samesite cookie-session


【解决方案1】:

我正在处理同样的问题。 SameSite=不需要 cookie 是安全的

https://www.chromestatus.com/feature/5633521622188032

尽管我设置了“secure: true”,但我仍然看到没有在 Chrome 上创建 cookie,但我确实在 Edge 上看到了它

【讨论】:

  • 同意,我的应用程序适用于除 Chrome 以外的所有浏览器
【解决方案2】:

经过 3 天的努力想通了。我终于找到了解决这个问题的方法,这不是修复,我很确定 PassportJS 最终会为此提供解决方案,但现在它允许我从身份验证中获取用户。

由于我们无法从 cookie 中获取用户,但信息在服务器会话中,因此获取此信息的方法是在 'server.js' 中添加直接从服务器会话获取用户的路由:

app.get('/api/getUser', (req, res) => {
  res.json(req.session.user);
});

出于某种原因,我想不知何故缺少 cookie,在路由器内部使用 req.session 返回未定义,但如果在“server.js”(或您的服务器索引文件)中使用它会获取会话。

如果您需要 req.user._id 或其他一些敏感信息来处理其他请求,我建议将带有此信息的 jwtToken 返回到前端(在 res.json 中),然后将令牌直接保存在 localStorage 中并传递请求正文中的令牌不是理想的,但这是我认为保护 id 安全的更安全的方式。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-06
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多