簡體   English   中英

為什么我的 res.clearCookie 和 req.session.destroy 沒有清除 cookies

[英]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 時使用的完全相同。 因此,如果您除了domainpath之外,還設置了securehttpOnly ,您還應該在清除 cookie 時添加這些。

請參閱 Express 文檔

編輯:在你的情況下,它可能是:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM