我正在开发一个Web应用程序,它在服务器端使用Java Spring,在客户端使用React。当用户登录时,服务器会在响应中发送一个cookie,客户端的后续请求预计会包含此cookie以进行身份验证。然而,cookie似乎没有随请求一起发送,我不确定为什么。
下面是设置set-cookie头的服务器端代码:
ResponseCookie cookie = ResponseCookie.from("my_cookie", "my_value")
.httpOnly(true)
.secure(false)
.sameSite("lax")
.build();
response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString());
下面是发出刷新访问令牌请求的客户端代码:
axios.get('/api/v1/auth/refresh_token', { withCredentials: true })
.then(response => console.log(response))
.catch(error => console.error(error));
下面是设置CORS配置的服务器端代码:
public class CorsConfiguration {
@Value("${navaship.webapp.url}")
private String webAppUrl;
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
// Add the CORS configuration for the /api/v1/auth/refresh-token endpoint
registry.addMapping("/api/v*/auth/refresh-token")
.allowedOrigins(webAppUrl)
.allowedMethods("GET")
.allowCredentials(true);
registry.addMapping("/api/v*/**")
.allowedOrigins(webAppUrl)
.allowedMethods("GET", "POST", "PUT", "DELETE");
}
};
}
}
我已经验证了服务器响应中的cookie设置正确,并且在/API/v1/auth/refresh-token端点的CORS配置中,allowCredentials选项设置为true。但是,当我在浏览器控制台中检查网络请求时,我没有看到请求头中发送的cookie。
是什么原因导致cookie不能随请求一起发送?我的代码或配置中是否缺少了什么?如有任何帮助,将不胜感激。
1条答案
按热度按时间ssm49v7z1#
尝试删除
.secure(true)
原因是
.secure
只允许cookie通过安全通道传输,即HTTPS。如果您在本地开发,则可能使用http,因此没有cookie。还要记住,
.httpOnly(true)
会阻止你的js代码(所以你的react应用程序)访问cookie。所以如果你的js代码需要读取cookie值,你需要禁用它。