diff --git a/.env.local b/.env.local new file mode 100644 index 0000000..9915ca0 --- /dev/null +++ b/.env.local @@ -0,0 +1,2 @@ +# Override the port to match what's in .env +PORT=3007 \ No newline at end of file diff --git a/app/auth/callback/route.ts b/app/auth/callback/route.ts index 5ca070e..659bfcd 100644 --- a/app/auth/callback/route.ts +++ b/app/auth/callback/route.ts @@ -7,8 +7,11 @@ export async function GET(request: NextRequest) { const requestUrl = new URL(request.url); const code = requestUrl.searchParams.get('code'); + console.log('Auth callback received:', { url: request.url, hasCode: !!code }); + // 如果没有code参数,则重定向到登录页面 if (!code) { + console.log('没有找到code参数,重定向到登录页面'); return NextResponse.redirect(new URL('/login', request.url)); } @@ -18,9 +21,42 @@ export async function GET(request: NextRequest) { const supabaseRouteHandler = createRouteHandlerClient({ cookies: () => cookieStore }); // 交换code获取会话 - await supabaseRouteHandler.auth.exchangeCodeForSession(code); + console.log('开始交换code获取会话'); + const { data, error } = await supabaseRouteHandler.auth.exchangeCodeForSession(code); - // 直接重定向到首页,避免中间跳转 + if (error) { + console.error('交换会话时出错:', error); + throw error; + } + + console.log('成功获取会话,用户:', data.session?.user.email); + + // 检查会话是否成功创建 + if (data.session) { + console.log('会话创建成功:', { + userId: data.session.user.id, + email: data.session.user.email, + expiresAt: data.session.expires_at ? new Date(data.session.expires_at * 1000).toISOString() : 'unknown' + }); + + // 设置额外的cookie以确保客户端能检测到登录状态 + // 使用Next.js的Response来设置cookie + const response = NextResponse.redirect(new URL('/', request.url)); + response.cookies.set({ + name: 'sb-auth-token', + value: 'true', + path: '/', + maxAge: 60 * 60 * 24 * 7, // 7 days + sameSite: 'lax', + secure: process.env.NODE_ENV === 'production', + httpOnly: false, + }); + console.log('设置了备用cookie: sb-auth-token'); + return response; + } + + // 优先使用应用程序根路径重定向 + console.log('重定向到首页'); return NextResponse.redirect(new URL('/', request.url)); } catch (error) { console.error('Auth callback error:', error); diff --git a/app/debug/page.tsx b/app/debug/page.tsx index cee06ba..819eeca 100644 --- a/app/debug/page.tsx +++ b/app/debug/page.tsx @@ -8,6 +8,8 @@ export default function DebugPage() { const { user, session, isLoading } = useAuth(); const [cookies, setCookies] = useState>({}); const [rawCookies, setRawCookies] = useState(''); + const [sessionData, setSessionData] = useState<{ session: any; user: any } | null>(null); + const [redirectTarget, setRedirectTarget] = useState('/analytics'); useEffect(() => { // 获取所有cookie @@ -22,14 +24,46 @@ export default function DebugPage() { // 测试supabase会话 const testSession = async () => { - const { data, error } = await supabase.auth.getSession(); - console.log('Debug page - Supabase session:', data); - if (error) console.error('Debug page - Session error:', error); + try { + console.log('正在获取Supabase会话'); + const { data, error } = await supabase.auth.getSession(); + console.log('Supabase session result:', { data, error }); + + if (error) { + console.error('Session error:', error); + } else { + setSessionData(data); + } + } catch (err) { + console.error('获取会话出错:', err); + } }; testSession(); }, []); + const refreshSession = async () => { + try { + console.log('手动刷新会话'); + const { data, error } = await supabase.auth.refreshSession(); + console.log('刷新结果:', { data, error }); + alert('会话刷新完成,请查看控制台日志'); + + if (!error && data.session) { + window.location.reload(); + } + } catch (err) { + console.error('刷新会话出错:', err); + alert('刷新会话出错: ' + String(err)); + } + }; + + const forceRedirect = () => { + if (redirectTarget) { + window.location.href = redirectTarget; + } + }; + return (

认证调试页面

@@ -42,9 +76,24 @@ export default function DebugPage() {

用户邮箱: {user?.email || '未登录'}

用户ID: {user?.id || '未登录'}

会话有效: {session ? '是' : '否'}

+

会话过期时间: {session?.expires_at ? new Date(session.expires_at * 1000).toLocaleString() : '无会话'}

+
+

Supabase 会话数据

+
+          {sessionData ? JSON.stringify(sessionData, null, 2) : '加载中...'}
+        
+ + +
+

Cookies 信息

@@ -67,6 +116,25 @@ export default function DebugPage() {
+
+

手动重定向

+
+ setRedirectTarget(e.target.value)} + className="flex-1 px-3 py-2 border border-gray-300 rounded" + placeholder="/analytics" + /> + +
+
+