import Cookies from 'universal-cookie';
const cookies = new Cookies();
cookies.remove('abc');
console.log(cookies.getAll());
_
それはまだ私のabc
cookieを印刷しています。
クッキーは、削除するためにそれらに添付されたパスとドメインの両方を持つ必要があります。これを試して:
cookies.remove("abc", {path: "/", domain: ".example.com"})
_
私は今日がいたのと同じように、今後も同様の問題があるかもしれない人々にこれを加えるだけです。これは非同期アクションに関する問題になる可能性があります。 Cookieの削除は非同期です。
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,
}
_