fix: callback 所有重定向使用 baseUrl(LESSONS-LEARNED #16)
This commit is contained in:
parent
e6712a1e99
commit
5cd300bee8
|
|
@ -13,24 +13,27 @@ export async function GET(request: NextRequest) {
|
||||||
const state = searchParams.get('state')
|
const state = searchParams.get('state')
|
||||||
const error = searchParams.get('error')
|
const error = searchParams.get('error')
|
||||||
|
|
||||||
|
// 使用 OIDC_REDIRECT_URI 构造公共 URL(LESSONS-LEARNED #16)
|
||||||
|
const baseUrl = authConfig.oidcRedirectUri?.replace(/\/api\/auth\/callback.*/, '') || 'http://localhost:6181'
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return NextResponse.redirect(new URL(`/login?error=${encodeURIComponent(error)}`, request.url))
|
return NextResponse.redirect(new URL(`/login?error=${encodeURIComponent(error)}`, baseUrl))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!code || !state) {
|
if (!code || !state) {
|
||||||
return NextResponse.redirect(new URL('/login?error=missing_params', request.url))
|
return NextResponse.redirect(new URL('/login?error=missing_params', baseUrl))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 验证 state
|
// 验证 state
|
||||||
const savedState = request.cookies.get('oidc_state')?.value
|
const savedState = request.cookies.get('oidc_state')?.value
|
||||||
if (!savedState || savedState !== state) {
|
if (!savedState || savedState !== state) {
|
||||||
return NextResponse.redirect(new URL('/login?error=state_mismatch', request.url))
|
return NextResponse.redirect(new URL('/login?error=state_mismatch', baseUrl))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 取出 code_verifier
|
// 取出 code_verifier
|
||||||
const codeVerifier = request.cookies.get('oidc_code_verifier')?.value
|
const codeVerifier = request.cookies.get('oidc_code_verifier')?.value
|
||||||
if (!codeVerifier) {
|
if (!codeVerifier) {
|
||||||
return NextResponse.redirect(new URL('/login?error=missing_verifier', request.url))
|
return NextResponse.redirect(new URL('/login?error=missing_verifier', baseUrl))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 换取 token
|
// 换取 token
|
||||||
|
|
@ -40,13 +43,13 @@ export async function GET(request: NextRequest) {
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!tokenResult.success) {
|
if (!tokenResult.success) {
|
||||||
return NextResponse.redirect(new URL(`/login?error=${encodeURIComponent(tokenResult.error || 'token_exchange_failed')}`, request.url))
|
return NextResponse.redirect(new URL(`/login?error=${encodeURIComponent(tokenResult.error || 'token_exchange_failed')}`, baseUrl))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 验证 nonce
|
// 验证 nonce
|
||||||
const savedNonce = request.cookies.get('oidc_nonce')?.value
|
const savedNonce = request.cookies.get('oidc_nonce')?.value
|
||||||
if (savedNonce && tokenResult.nonce && savedNonce !== tokenResult.nonce) {
|
if (savedNonce && tokenResult.nonce && savedNonce !== tokenResult.nonce) {
|
||||||
return NextResponse.redirect(new URL('/login?error=nonce_mismatch', request.url))
|
return NextResponse.redirect(new URL('/login?error=nonce_mismatch', baseUrl))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取 userinfo
|
// 获取 userinfo
|
||||||
|
|
@ -74,9 +77,6 @@ export async function GET(request: NextRequest) {
|
||||||
payload: { username: userinfo.preferred_username, displayName: userinfo.name, role: user.role },
|
payload: { username: userinfo.preferred_username, displayName: userinfo.name, role: user.role },
|
||||||
})
|
})
|
||||||
|
|
||||||
// 使用 OIDC_REDIRECT_URI 构造公共 URL(LESSONS-LEARNED #16)
|
|
||||||
const baseUrl = authConfig.oidcRedirectUri?.replace(/\/api\/auth\/callback.*/, '') || 'http://localhost:6181'
|
|
||||||
|
|
||||||
const response = NextResponse.redirect(new URL('/', baseUrl))
|
const response = NextResponse.redirect(new URL('/', baseUrl))
|
||||||
|
|
||||||
// 签发 tlyq_session cookie
|
// 签发 tlyq_session cookie
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue