我已经构建了一个Node.js Express API,每当用户使用(POST)/login时,如果成功登录,API将设置授权令牌,如下所示:
@Post('/login')
@UseBefore(validationMiddleware(LoginUserDto, 'body'))
async logIn(@Res() res: Response, @Body() userData: LoginUserDto) {
const { cookie, user } = await this.authService.login(userData);
res.setHeader('Set-Cookie', [cookie]);
return user
}
每当我在本地运行Docker映像时,如果React应用程序请求它,它会成功地在浏览器中创建令牌作为cookie。
由于它是工作的,我部署在Azure和Digitalocean中的API的docker映像(为了看看是否在两者上都工作。但当我尝试使用部署的API登录时,它会成功POST,但在使用React应用程序时,浏览器中不会设置Cookie(在应用程序中,凭据设置为true以保存)。
我尝试用Postman和Insomnia调用部署的API,它们都将保存成功登录后的cookie。
在最后一个实验中,我真的很困惑,因为API在本地运行时在postman和react应用程序中都能按预期工作,但在部署时只在postman中按预期工作,而在React中则不然。我不明白问题是来自react还是来自API。
我也尝试过在react中使用RTK和Axios,都得到了相同的结果。在API的CORS选项中,原点设置为“*”
1条答案
按热度按时间ecbunoof1#
已经发现了,似乎在创建cookie时我没有设置Same-Site属性,默认为Lax,它不允许浏览器保存cookie。我将其设置为none,需要在它后面加上 secure。