Cookie 设置不正确

编程入门 行业动态 更新时间:2024-09-27 21:21:17

Cookie 设置<a href=https://www.elefans.com/category/jswz/34/1770186.html style=不正确"/>

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 设置不正确

本文发布于:2024-05-31 07:13:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1771406.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:不正确   Cookie

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!