token刷新改为前端

This commit is contained in:
mtvpls
2026-01-27 09:08:44 +08:00
parent 69ad303045
commit f5c36330d9
3 changed files with 147 additions and 59 deletions
+4 -59
View File
@@ -3,7 +3,6 @@
import { NextRequest, NextResponse } from 'next/server';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { refreshAccessToken, shouldRenewToken } from '@/lib/middleware-auth';
import { TOKEN_CONFIG } from '@/lib/refresh-token';
export async function middleware(request: NextRequest) {
@@ -54,37 +53,9 @@ export async function middleware(request: NextRequest) {
const now = Date.now();
const age = now - authInfo.timestamp;
// Access Token 已过期,尝试使用 Refresh Token 刷新
// Access Token 已过期,前端负责刷新
if (age > ACCESS_TOKEN_AGE) {
if (authInfo.refreshToken && authInfo.tokenId && authInfo.refreshExpires) {
// 检查 Refresh Token 是否过期
if (now < authInfo.refreshExpires) {
// 尝试刷新 Access Token
const newAuthData = await refreshAccessToken(
authInfo.username,
authInfo.role,
authInfo.tokenId,
authInfo.refreshToken,
authInfo.refreshExpires
);
if (newAuthData) {
// 刷新成功,设置新 Cookie
const response = NextResponse.next();
const expires = new Date(authInfo.refreshExpires);
response.cookies.set('auth', newAuthData, {
path: '/',
expires,
sameSite: 'lax',
httpOnly: false,
secure: false,
});
return response;
}
}
}
// Refresh Token 也过期或刷新失败,需要重新登录
console.log(`Access token expired for ${authInfo.username}, redirecting to login`);
return handleAuthFailure(request, pathname);
}
@@ -101,34 +72,8 @@ export async function middleware(request: NextRequest) {
return handleAuthFailure(request, pathname);
}
// 签名验证通过,检查是否需要续期
if (shouldRenewToken(authInfo.timestamp)) {
// 快过期了,自动续期
if (authInfo.refreshToken && authInfo.tokenId && authInfo.refreshExpires) {
const newAuthData = await refreshAccessToken(
authInfo.username,
authInfo.role,
authInfo.tokenId,
authInfo.refreshToken,
authInfo.refreshExpires
);
if (newAuthData) {
const response = NextResponse.next();
const expires = new Date(authInfo.refreshExpires);
response.cookies.set('auth', newAuthData, {
path: '/',
expires,
sameSite: 'lax',
httpOnly: false,
secure: false,
});
return response;
}
}
}
// 正常通过
// 签名验证通过
// 注意:Token 续期由前端负责,Middleware 不再自动刷新
return NextResponse.next();
}