1

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

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

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

在此处输入图像描述

4

2 回答 2

0

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

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

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

于 2020-08-18T17:52:35.090 回答
0

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 中并将令牌传递到您的请求正文不是理想的,但这是我认为保持身份安全的更安全的方式。

我希望它可以帮助你!

于 2020-08-28T05:28:41.023 回答