2025-04-26 14:18:08 +08:00
|
|
|
import {NextRequest, NextResponse} from 'next/server'
|
|
|
|
|
import {refreshAuth} from '@/actions/auth'
|
|
|
|
|
|
|
|
|
|
export const config = {
|
|
|
|
|
matcher: [
|
2025-11-20 15:08:22 +08:00
|
|
|
'/((?!api|_next/static|_next/image|.well-known|sw.js|favicon.ico|sitemap.xml|robots.txt).*(?<!\.svg|\.webp|\.jpg)$)',
|
2025-04-26 14:18:08 +08:00
|
|
|
],
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-20 12:10:16 +08:00
|
|
|
export async function proxy(request: NextRequest) {
|
2025-04-26 14:18:08 +08:00
|
|
|
console.log('👀 middleware triggered', request.method, request.nextUrl.pathname)
|
|
|
|
|
|
|
|
|
|
// 记录请求页面
|
|
|
|
|
request.headers.set('x-pathname', request.nextUrl.pathname)
|
|
|
|
|
|
2025-04-30 18:22:04 +08:00
|
|
|
// 刷新访问令牌
|
|
|
|
|
try {
|
|
|
|
|
const accessToken = request.cookies.get('auth_token')
|
|
|
|
|
const refreshToken = request.cookies.get('auth_refresh')
|
|
|
|
|
if (!accessToken && !!refreshToken) {
|
|
|
|
|
console.log('💡 refresh token')
|
|
|
|
|
const token = await refreshAuth()
|
|
|
|
|
request.cookies.set('auth_token', token.access_token)
|
|
|
|
|
request.cookies.set('auth_refresh', token.refresh_token)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (e) {
|
2025-12-04 15:53:59 +08:00
|
|
|
console.log('刷新访问令牌失败', request.url, (e as Error).message)
|
2025-04-30 18:22:04 +08:00
|
|
|
}
|
|
|
|
|
|
2025-05-12 10:58:17 +08:00
|
|
|
// 验证访问令牌
|
2025-12-09 15:25:54 +08:00
|
|
|
const hasToken = !!request.cookies.get('auth_token')
|
|
|
|
|
const isToAdmin = request.nextUrl.pathname.startsWith('/admin')
|
|
|
|
|
if (!hasToken && isToAdmin) {
|
|
|
|
|
return NextResponse.redirect(`${request.nextUrl.origin}/login?redirect=${request.nextUrl.pathname}`)
|
2025-04-26 14:18:08 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return NextResponse.next({request})
|
|
|
|
|
}
|