32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs';
|
||
import { cookies } from 'next/headers';
|
||
import { NextResponse } from 'next/server';
|
||
import type { NextRequest } from 'next/server';
|
||
|
||
export async function GET(request: NextRequest) {
|
||
const requestUrl = new URL(request.url);
|
||
const code = requestUrl.searchParams.get('code');
|
||
|
||
// 如果没有code参数,则重定向到登录页面
|
||
if (!code) {
|
||
return NextResponse.redirect(new URL('/login', request.url));
|
||
}
|
||
|
||
try {
|
||
// 创建supabase客户端
|
||
const cookieStore = cookies();
|
||
const supabaseRouteHandler = createRouteHandlerClient({ cookies: () => cookieStore });
|
||
|
||
// 交换code获取会话
|
||
await supabaseRouteHandler.auth.exchangeCodeForSession(code);
|
||
|
||
// 直接重定向到首页,避免中间跳转
|
||
return NextResponse.redirect(new URL('/', request.url));
|
||
} catch (error) {
|
||
console.error('Auth callback error:', error);
|
||
// 出错时重定向到登录页面
|
||
return NextResponse.redirect(
|
||
new URL('/login?message=Authentication failed. Please try again.', request.url)
|
||
);
|
||
}
|
||
}
|