如何在react js中删除Web应用程序cookie

Luc*_*cky 10 javascript cookies reactjs

我是 ReactJs 的新手,我想删除 cookie 并在注销按钮上登录会话以断开用户的会话。但我无法访问代码中的cookie。

请帮忙。

adR*_*adR 11

如果您在 JWT 的 Express 后端的登录路由中的响应上设置 cookie 并使用“httpOnly”选项,则即使使用“universal-”等第三方库,您也无法从客户端/react 访问令牌。 cookie' 或 'document.cookie'。

您需要清除后端响应中的 cookie,例如,当用户注销时。

前端:

// React redux logout action
export const logout = () => async (dispatch) => {
    try {
        await axios.get('/api/auth/logout')
        localStorage.removeItem('userInfo')
        dispatch({ type: type.USER_LOGOUT })
    } catch (error) {
        console.log(error)
    }
}
Run Code Online (Sandbox Code Playgroud)

后端:

const User = require('../../models/userModel')
const generateToken = require('../../utils/generateToken')

// @desc    Auth user & get token
// @route   POST /api/auth/login
// @access  Public
const login = async (req, res) => {
    const { email, password } = req.body
    try {
        const user = await User.findOne({ email })
        if (user && (await user.verifyPassword(password))) {
            let token = generateToken(user._id)
            res.cookie('token', token, {
                maxAge: 7200000, // 2 hours
                secure: false, // set to true if you're using https
                httpOnly: true,
            })
            res.json({
                _id: user._id,
                name: user.name,
                email: user.email,
                isAdmin: user.isAdmin,
                token: token,
            })
        } else {
            res
                .status(401)
                .json({ success: false, message: 'Invalid email or password' })
        }
    } catch (error) {
        res.status(500).json({ success: false, message: error.toString() })
    }
}

// @desc    Logout controller to clear cookie and token
// @route   GET /api/auth/logout
// @access  Private
const logout = async (req, res) => {
    // Set token to none and expire after 5 seconds
    res.cookie('token', 'none', {
        expires: new Date(Date.now() + 5 * 1000),
        httpOnly: true,
    })
    res
        .status(200)
        .json({ success: true, message: 'User logged out successfully' })
}

module.exports = {
    login,
    logout,
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*vid 9

您可以通过 访问 cookie document.cookie。为了删除 cookie,您可以将过期日期设置为过去的日期:

document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
Run Code Online (Sandbox Code Playgroud)

解决方案描述如下: https: //www.w3schools.com/js/js_cookies.asp

还有一些用于处理 cookie 的帮助程序库(例如https://www.npmjs.com/package/react-cookie),但这些会稍微增加您的包大小。

  • 因此,如果您想在 JavaScript 中访问服务器设置的 cookie,请确保 cookie 标志“httpOnly”设置为 false。但是,由于这会降低 Web 应用程序的安全性,我建议您删除服务器端的 cookie。Express 中的示例:https://expressjs.com/en/4x/api.html#res.clearCookie (2认同)