NextJS中间件:删除过期Token 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
相关产品推荐
相关产品推荐

