Javascript 如何在react js中删除web应用程序cookie
我是reactJs新手,我想删除Cookie并在注销按钮上登录会话,以连接用户会话。 但我无法访问代码中的cookiesJavascript 如何在react js中删除web应用程序cookie,javascript,reactjs,cookies,Javascript,Reactjs,Cookies,我是reactJs新手,我想删除Cookie并在注销按钮上登录会话,以连接用户会话。 但我无法访问代码中的cookies 请提供帮助。您可以通过document.cookie访问cookie。要删除cookie,可以将过期日期设置为过去的日期: document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; 解决方案如下所述: 还有一些帮助程序库可用于处理cookie(例如),但它们会略微增加您的包大
请提供帮助。您可以通过
document.cookie
访问cookie。要删除cookie,可以将过期日期设置为过去的日期:
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
解决方案如下所述:
还有一些帮助程序库可用于处理cookie(例如),但它们会略微增加您的包大小。您可以通过
document.cookie
访问cookie。要删除cookie,可以将过期日期设置为过去的日期:
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
解决方案如下所述:
还有一些帮助程序库可用于处理cookie(例如),但它们会略微增加您的捆绑包大小。如果您在JWT的express backend中的登录路由中设置cookie,并且使用“httpOnly”选项,则无法从客户端/react访问令牌,即使使用第三方库,如“universal 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)
}
}
后端:
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 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,
}
如果您在JWT的express backend中的登录路由中对响应设置cookie,并且使用“httpOnly”选项,则即使使用第三方库(如“universal cookie”或“document.cookie”),您也无法从客户端/react访问令牌 您需要从后端清除响应中的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 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,
}
在我的情况下,Cookie不会手动出现在代码中。但它是在登录时添加的,并且相应的SessionId会添加到浏览器Cookie中,我希望删除它。(我访问的是登录时生成的删除Cookie),因此如果您想访问服务器设置的JavaScript中的Cookie,确保cookie标志
httpOnly
设置为false。但是,由于这会降低web应用程序的安全性,我建议您删除服务器端的cookie。express中的示例:当您删除cookie时,请确保同时使服务器上的会话无效。在我的情况下,cookie不会手动出现在代码中。但它是在登录时添加的,并且在浏览器cookie中添加了相应的sessionId,我希望删除该cookie。(我访问并希望删除登录时生成的cookie)因此,如果要访问服务器设置的JavaScript中的cookie,请确保cookie标志httpOnly
设置为false。但是,由于这会降低web应用程序的安全性,我建议您删除服务器端的cookie。express中的示例:当您删除cookie时,请确保同时使服务器上的会话无效。