不正确"/>
Cookie 设置不正确
我正在使用express/react/mongoose 制作一个登录系统。我正在使用 JWT 算法。登录部分有效。当我刷新页面时,刷新路由被触发并且有效。但是,当我再次刷新页面时,它又将我送回。第一次刷新时 cookie 就会被删除。我已经诊断出这种行为的问题:猫鼬没有正确找到文档。用户变量第一次正确记录。但是,第二次时,它记录为空。 (React 发送了两个请求。)这肯定是服务器问题。如有帮助,我们将不胜感激。
const refresh = asyncHandler(async (req, res) => {
const cookies = req.cookies;
if (!cookies?.jwt) return res.status(401).json({ message: "Unauthorized user" });
const refreshToken = cookies.jwt;
console.log(refreshToken);
res.clearCookie('jwt', { httpOnly: true, sameSite: 'None', secure: true });
const user = await Users.findOne({ refreshToken }).exec();
console.log(user);
if (!user) {
jwt.verify(
refreshToken,
process.env.REFRESH_TOKEN_SECRET,
async (err, decoded) => {
if (err) return res.sendStatus(403);
const user = await Users.findOne({ username: decoded.username }).exec();
user.refreshToken = [];
await user.save();
}
);
return res.sendStatus(403);
}
const newRTArray = user.refreshToken.filter(rt => rt !== refreshToken);
jwt.verify(
refreshToken,
process.env.REFRESH_TOKEN_SECRET,
asyncHandler(async (err, decoded) => {
if (err) {
user.refreshToken = [...newRTArray];
await user.save();
}
if (err || user.username !== decoded.username) return res.sendStatus(403);
const accessToken = generateToken({
"UserInfo": {
"username": user.username,
"role": user.role
}
}, "access");
const newRT = generateToken({
username: user.username
}, "refresh");
user.refreshToken = [...newRTArray, newRT];
await user.save();
res.cookie('jwt', newRT, { httpOnly: true, secure: true, sameSite: 'None', maxAge: 24 * 60 * 60 * 1000 });
res.json({ role: user.role, accessToken });
})
);
});
编辑:经过更多诊断后,我找出了问题的根本原因。第二次 React 发送请求时,cookie 没有更新。然而,添加我的代码部分的 cookie 看起来不错。
编辑#2:经过更多调试,我发现了具体问题,但我不知道如何解决它。由于某种原因,React 发送了两个相同的请求。两个请求具有相同的 cookie,因为它们是相同的请求。第一个请求通过。然而,第二个不会干扰整个程序。
回答如下:更多推荐
Cookie 设置不正确
发布评论