为了进行身份验证,我的服务器(nestjs)发送回带有令牌的cookie。
这是这样完成的:
@SetCookies()
@Post("account/signin")
async signin(@Body() dto: LoginDto, @Req() req, ){
const token = await this._authService.signin(req.user);
const options: CookieOptions = {
expires: moment().add(10, "days").toDate(),
signed: false,
secure: false,
sameSite: false,
httpOnly: true,
};
req._cookies = [
{
name: "SESSIONID",
value: token,
options: options,
}
];
}
它有效!至少邮递员向我显示了cookie已成功创建并发送回去。
但是当Angular这样调用API时:
public signin(dto: LoginDto): Observable<any>{
return this._httpClient.post("http://localhost:3000/account/signin", {
username: dto.username,
password: dto.password,
}, {
withCredentials: true,
})
}
set-cookie将在devtools的“网络”标签中发回。
Chrome devtools response headers
但是cookie没有存储在磁盘上。用户已登录,但没有cookie保留。 EditThisCookie不显示任何内容,并且在重新加载后向服务器发出请求时不发送任何cookie。
在other questions中,通过将cookie的安全属性设置为false(我已经尝试过)解决了该问题。
我在服务器上设置了带有凭据= true的cors,登录时双方都没有任何错误。