Estoy siguiendo el tutorial de bens graphql Reddit. Revisé mis variables y son correctas. Aquí está mi código de cierre de sesión de 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) })) }mi claro código de cookie:
res.clearCookie(COOKIE_NAME, { domain: "localhost", path: "/", httpOnly:true, sameSite:"lax"})mi código de sesión:
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, })No es necesario que expires en las opciones al borrar la cookie. Y las otras opciones deben ser exactamente las mismas que usó cuando configuró la cookie. Entonces, si usted, además domain y path , por ejemplo, también establece secure o httpOnly , también debe agregarlos al borrar la cookie.
Editar: en su caso, probablemente sería:
res.clearCookie(COOKIE_NAME, { httpOnly: true, sameSite: "lax", path: "/", // default when setting session cookie secure:__prod__ })Pero dado que está utilizando una sesión, que establece una cookie de sesión, también puede borrar la cookie destruyendo la sesión , usando:
req.session.destroy(error =>{ console.log(error); });Esta podría ser la forma preferida, creo.
Espero que esto ayude.