升级依赖版本并修复构建问题
This commit is contained in:
49
src/proxy.ts
Normal file
49
src/proxy.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import {NextRequest, NextResponse} from 'next/server'
|
||||
import {refreshAuth} from '@/actions/auth'
|
||||
|
||||
export const config = {
|
||||
matcher: [
|
||||
'/((?!api|_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*(?<!\.svg|\.webp|\.jpg)$)',
|
||||
],
|
||||
}
|
||||
|
||||
export async function proxy(request: NextRequest) {
|
||||
console.log('👀 middleware triggered', request.method, request.nextUrl.pathname)
|
||||
|
||||
// 记录请求页面
|
||||
request.headers.set('x-pathname', request.nextUrl.pathname)
|
||||
|
||||
// 刷新访问令牌
|
||||
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) {
|
||||
console.log('❌ 刷新访问令牌失败', e)
|
||||
}
|
||||
|
||||
// 验证访问令牌
|
||||
if (request.cookies.get('auth_token')) {
|
||||
// 如果刷新访问令牌成功,则继续访问之前的页面
|
||||
const isLogin = request.nextUrl.pathname === '/login'
|
||||
const hasRedirect = request.nextUrl.searchParams.get('redirect')
|
||||
if (isLogin && hasRedirect) {
|
||||
return NextResponse.redirect(`${request.nextUrl.origin}${hasRedirect}`)
|
||||
}
|
||||
}
|
||||
else {
|
||||
// 没有访问令牌不允许访问 admin 页面
|
||||
const isAdmin = request.nextUrl.pathname.startsWith('/admin')
|
||||
if (isAdmin) {
|
||||
return NextResponse.redirect(`${request.nextUrl.origin}/login?redirect=${request.nextUrl.pathname}`)
|
||||
}
|
||||
}
|
||||
|
||||
return NextResponse.next({request})
|
||||
}
|
||||
Reference in New Issue
Block a user