所以在我的快速登录路线中,我使用jwt进行认证,我想将逻辑移动到一个单独的域中,所以我将其放入一个函数中并修改了我的代码。但我注意到的是,当我的客户端代码试图读取cookie时,它不存在,所以它出错,但在它试图读取值之后,cookie出现了。我假设这是一个竞争条件,在这种情况下,客户端在设置cookie之前阅读cookie,但路由和函数之间的执行时间微不足道。我真的不明白发生了什么,我不想因为一个简单的函数调用而在客户端实现一个暂停来等待cookie。
之前(工作代码):
const token = jwt.sign(
{ id: userInfo.id, username: userInfo.username },
process.env.SECRET!,
);
let cookieOptions: CookieOptions = {
httpOnly: false,
secure: process.env.NODE_ENV === "production",
};
if (remember) {
cookieOptions = {
...cookieOptions,
maxAge: 7 * 24 * 3600000,
expires: new Date(Date.now() + 7 * 24 * 3600000),
};
}
res.cookie("access_token", token, cookieOptions).json({
match: match,
userinfo: {
id: userInfo.id,
username: userInfo.username,
email: userInfo.email,
firstName: userInfo.first_name,
lastName: userInfo.last_name,
},
});
字符串
问题儿童(The Problem Child):
const { token, cookieOptions } = generateAuthToken(
{
id: userInfo.id,
username: userInfo.username,
},
remember,
);
res.cookie("access_token", token, cookieOptions).json({
match: match,
userInfo: {
id: userInfo.id,
username: userInfo.username,
email: userInfo.email,
firstName: userInfo.first_name,
lastName: userInfo.last_name,
},
}),
型
我看到功能没有改变,在刷新客户端时,代码可以读取cookie,应用程序按预期工作。我试着为每一个的执行计时,发现没有任何有意义的变化。
1条答案
按热度按时间m1m5dgzv1#
从反馈和更多的研究中,我意识到这更多的是我的应用程序的架构问题,而不是代码实现的问题。所以我会研究其他的解决方案。