[英]why my res.clearCookie and req.session.destroy not clearing cookies
我正在關注 bens graphql Reddit 教程。 我檢查了我的變量,它們是正確的,這是我的 graphql 注銷代碼:
@Mutation(() => Boolean)
logOut(
@Ctx() { req, res }: MyContext
) {
return new Promise(resolve => req.session.destroy(err => {
console.log("logout is called")
res.clearCookie(COOKIE_NAME, { domain: "localhost", path: "/",
expires:new Date(Date.now())})
if (err) {
console.log("err",err)
return resolve(false)
}
resolve(true)
}))
}
我清晰的 cookie 代碼:
res.clearCookie(COOKIE_NAME, { domain: "localhost", path: "/",
httpOnly:true, sameSite:"lax"})
我的 session 代碼:
app.use(
session({
name: COOKIE_NAME,
// store: new RedisStore({
// client: redisClient,
// disableTouch: true,
// disableTTL: true,
// }),
cookie: {
maxAge: 1000 * 60 * 60 * 24 * 365, //1year
httpOnly: true,
sameSite: "lax", //protecting csrf
// secure:__prod__ //cookie only works in https
secure:__prod__
},
secret: "hellovikash",
resave: false,
saveUninitialized: true,
})
清除 cookie 時不需要選項中的expires
。 並且其他選項必須與您設置 cookie 時使用的完全相同。 因此,如果您除了domain
和path
之外,還設置了secure
或httpOnly
,您還應該在清除 cookie 時添加這些。
編輯:在你的情況下,它可能是:
res.clearCookie(COOKIE_NAME, {
httpOnly: true,
sameSite: "lax",
path: "/", // default when setting session cookie
secure:__prod__
})
但是由於您使用的是 session,它設置了一個 session cookie,您也可以通過銷毀 session來清除 cookie,使用:
req.session.destroy(error =>{
console.log(error);
});
我認為這可能是首選方式。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.