web-dev-qa-db-ja.com

Cookie.Remove( 'abc')ReactJSで動作していません

import Cookies from 'universal-cookie';

const cookies = new Cookies();
cookies.remove('abc');

console.log(cookies.getAll());
 _

それはまだ私のabc cookieを印刷しています。

5
user10916649

あなたが何かをする必要があるかもしれません

cookies.remove('abc', { path: '/' });
 _

詳細: こちら

8
Sid

クッキーは、削除するためにそれらに添付されたパスとドメインの両方を持つ必要があります。これを試して:

cookies.remove("abc", {path: "/", domain: ".example.com"})  
 _
2
Jeff Klink

私は今日がいたのと同じように、今後も同様の問題があるかもしれない人々にこれを加えるだけです。これは非同期アクションに関する問題になる可能性があります。 Cookieの削除は非同期です。

1
ann.piv

JWTのExpress Backendのログインルート/コントローラの応答にCookieを設定している場合は、「HTTPONLY」オプションを使用している場合は、サードパーティ製ライブラリを使用する場合でも、クライアントからトークンにアクセスすることはできません。 Universal-Cookie 'または' Document.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)
    }
}
 _

バックエンド:

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 your 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/login
// @access  Private
const logout = async (req, res) => {
    // Set token to none and expire after 1 seconds
    res.cookie('token', 'none', {
        expires: new Date(Date.now() + 1 * 1000),
        httpOnly: true,
    })
    res
        .status(200)
        .json({ success: true, message: 'User logged out successfully' })
}

module.exports = {
    login,
    logout,
}
 _
0
adR