You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextJS中间件:删除过期Token Cookie后跳转登录页的问题

Next.js Middleware:同时删除Cookie并重定向的解决方案

核心思路是在同一个重定向响应对象上完成Cookie删除操作,因为每个请求只能返回一个响应,分开处理NextResponse.next()和重定向响应必然会导致其中一个操作失效。具体实现步骤如下:

代码示例

import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export function middleware(request: NextRequest) {
  // 替换为实际的token过期判断逻辑
  const isAccessTokenExpired = /* 检查accessToken是否过期 */;
  const isRefreshTokenExpired = /* 检查refreshToken是否过期 */;

  if (isAccessTokenExpired && isRefreshTokenExpired) {
    // 1. 创建指向/login的重定向响应对象
    const redirectResponse = NextResponse.redirect(new URL('/login', request.url));

    // 2. 在该响应上删除目标Cookie(若Cookie有path/domain属性,需匹配设置)
    redirectResponse.cookies.delete('accessToken');
    redirectResponse.cookies.delete('refreshToken');
    // 带属性的删除示例:redirectResponse.cookies.delete('accessToken', { path: '/', domain: 'your-domain.com' });

    // 3. 返回处理后的响应,同时触发重定向和Cookie删除
    return redirectResponse;
  }

  // 其他情况继续原请求流程
  return NextResponse.next();
}

// 可选:配置中间件生效的路由范围
export const config = {
  matcher: ['/dashboard/:path*', '/profile/:path*'], // 替换为需要保护的路由
};

关键说明

  • NextResponse.redirect()返回的响应对象自带cookies操作能力,支持delete、set等方法,修改后返回该对象就能同时完成两个操作。
  • 若Cookie设置了path、domain、secure等属性,删除时必须传入完全匹配的参数,否则删除操作会失效。

内容的提问来源于stack exchange,提问作者VGabriel45

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:16:13