Node.js Express API 如果部署了 docker 映像,则不会发送标头



我已经构建了一个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选项中,原点设置为"*">

已经发现,似乎在创建cookie时我没有设置Same-Site属性,默认情况下是Lax,它不让浏览器保存cookie。我将其设置为none,并且需要在后面加上secure

public createCookie(tokenData: TokenData): string {
return `Authorization=${tokenData.token}; HttpOnly; Max-Age=${tokenData.expiresIn}; SameSite=None; Secure`;
}

最新更新