我正在设置 2 个 cookie 以响应从后端到浏览器的情况。一种是安全的HTTPOnly(它是refreshToken),另一种没有这些参数,因此JavaScript可以访问它(携带有关refreshToken设置和过期时间的信息)。
Cookie 响应:
这两个都没有在浏览器中设置。我研究了所有关于cookie的知识,老实说,我在这里迷路了,需要你的帮助。
起初,它在我的本地主机环境中运行得很好(后端在本地主机:8080,前端在本地主机:3000)。然后我进行了部署,但它不起作用。我在本地主机上再次测试,并检查了“禁用缓存”以防止不必要的行为,但即使在那里它也不起作用。
我会提到我正在使用 CORS,不确定这是否会干扰:
我在 Chrome 和 Firefox 中对此进行了测试。
我终于想通了。Cookie 有效。答案是在前端和后端都设置withCredentials = true。
首先,我认为前端参数withCredentials仅当我们想要发送隐藏在安全 HttpOnly cookie 中的凭据时使用,我们无权访问这些凭据,但浏览器可以访问。显然,当我们想从响应中设置 cookie 时,也会使用它。链接到文档。
来自不同域的响应无法为其自己的域设置 cookie 值,除非在发出请求之前将 withCredentials 设置为 true
其次,我们还必须在后端将 withCredentials添加到CorsFilter(在 Spring boot 中),否则我们会收到 CORS 错误。
CorsConfiguration()
.apply {
allowedOrigins = listOf(uiUrl)
allowedHeaders = listOf("*")
allowedMethods = listOf("*")
allowCredentials = true
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6062 次 |
| 最近记录: |