diff --git a/README-google-auth.md b/README-google-auth.md new file mode 100644 index 0000000..059efce --- /dev/null +++ b/README-google-auth.md @@ -0,0 +1,50 @@ +# 配置 Google 登录功能 + +为了启用 Google 登录功能,您需要在 Supabase 和 Google Cloud Platform 进行配置。 + +## 步骤 1: 创建 Google OAuth 客户端 + +1. 访问 [Google Cloud Console](https://console.cloud.google.com/) +2. 创建一个新项目或选择现有项目 +3. 在左侧菜单中导航到 "API 和服务" > "OAuth 同意屏幕" +4. 选择用户类型(外部或内部),然后点击"创建" +5. 填写必要的信息(应用名称、用户支持电子邮件等)并保存 +6. 导航到 "API 和服务" > "凭据" +7. 点击"创建凭据" > "OAuth 客户端 ID" +8. 应用类型选择 "Web 应用" +9. 名称中输入您的应用名称 +10. 添加以下已获授权的重定向 URI: + - `https://mwwvqwevplndzvmqmrxa.supabase.co/auth/v1/callback` +11. 点击"创建" +12. 复制生成的 "客户端 ID" 和 "客户端密钥" + +## 步骤 2: 在 Supabase 中配置 Google 提供商 + +1. 登录 [Supabase 仪表板](https://app.supabase.com) +2. 选择您的项目 +3. 导航到 "身份验证" > "提供商" +4. 找到 Google 提供商并启用它 +5. 粘贴您刚才获取的 "客户端 ID" 和 "客户端密钥" +6. 保存配置 + +## 步骤 3: 更新重定向 URL(如有需要) + +如果您的应用需要在登录后重定向到特定页面,请确保在 Google Cloud Console 和 Supabase 中配置了正确的重定向 URL。 + +在 Supabase 中: +1. 导航到 "身份验证" > "URL 配置" +2. 添加您的前端 URL 到站点 URL 字段中 +3. 设置重定向 URL(通常是您的前端 URL) + +## 测试 + +1. 在您的应用中,尝试使用 Google 登录 +2. 验证认证流程,确保可以成功登录并重定向到应用 +3. 检查 Supabase 中的用户数据,确认新用户已创建 + +## 故障排除 + +- 确保重定向 URI 完全匹配 +- 确保 OAuth 同意屏幕已正确配置 +- 查看 Supabase 和应用程序中的日志以获取详细的错误信息 +- 如果遇到 CORS 错误,检查您的站点 URL 配置 \ No newline at end of file diff --git a/app/auth/callback/route.ts b/app/auth/callback/route.ts new file mode 100644 index 0000000..a974dfd --- /dev/null +++ b/app/auth/callback/route.ts @@ -0,0 +1,17 @@ +import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs'; +import { cookies } from 'next/headers'; +import { NextRequest, NextResponse } from 'next/server'; + +export async function GET(request: NextRequest) { + const requestUrl = new URL(request.url); + const code = requestUrl.searchParams.get('code'); + + if (code) { + const cookieStore = cookies(); + const supabase = createRouteHandlerClient({ cookies: () => cookieStore }); + await supabase.auth.exchangeCodeForSession(code); + } + + // URL to redirect to after sign in process completes + return NextResponse.redirect(new URL('/analytics', request.url)); +} \ No newline at end of file diff --git a/app/login/page.tsx b/app/login/page.tsx index 6403930..8becb03 100644 --- a/app/login/page.tsx +++ b/app/login/page.tsx @@ -21,7 +21,7 @@ function MessageHandler({ setMessage }: { setMessage: (message: { type: string, export default function LoginPage() { const router = useRouter(); - const { signIn, user } = useAuth(); + const { signIn, signInWithGoogle, user } = useAuth(); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); @@ -67,6 +67,28 @@ export default function LoginPage() { } }; + const handleGoogleSignIn = async () => { + try { + setIsLoading(true); + setMessage({ type: '', content: '' }); + + const { error } = await signInWithGoogle(); + + if (error) { + throw new Error(error.message); + } + + // Google OAuth will handle the redirect + } catch (error) { + console.error('Google login error:', error); + setMessage({ + type: 'error', + content: error instanceof Error ? error.message : 'Failed to sign in with Google' + }); + setIsLoading(false); + } + }; + return (
- 创建您的帐户以访问分析仪表板 + Create your account to access the analytics dashboard
- 已有账号?{' '} + Already have an account?{' '} - 登录 + Log in