在 Next.js 中删除 Cookie 并注销服务器端

Rub*_*uby 6 cookies server-side reactjs next.js

我需要检查 getInitialProps 中是否有令牌以及令牌是否过期,然后如果令牌过期,请从浏览器中清除 Cookie 并注销用户。

这就是我到目前为止正在做的事情......

const isTokenExpired = (token) => {
    const currentTime = new Date().getTime() / 1000;
    const decodedToken: MetadataObj = jwt_decode(token);
    if (decodedToken.exp < currentTime) {
        return true;
    } else {
        return false;
    }
};

import nextCookie from "next-cookies";
import Cookies from "js-cookie";

MyApp.getInitialProps = async ({ctx}: any) => {
    const { WebsiteToken } = nextCookie(ctx);
    if (WebsiteToken ) {
        if (isTokenExpired(WebsiteToken )) {
            console.log("Token Expired");
            Cookies.remove("WebsiteToken ");
        }    
    }

}
Run Code Online (Sandbox Code Playgroud)

控制台日志可以工作,但是 Cookie 没有从浏览器中删除,我知道这是因为它没有到达客户端,但是我如何从服务器上做到这一点?

小智 11

您可以通过设置标头来删除 cookie:

ctx.res.setHeader(
  "Set-Cookie", [
  `WebsiteToken=deleted; Max-Age=0`,
  `AnotherCookieName=deleted; Max-Age=0`]
);
Run Code Online (Sandbox Code Playgroud)

它将把 cookie 值设置为“删除”,但这并不重要,因为Max-Age=0这意味着 cookie 将立即过期,浏览器将删除它。