From 92db5ad7837fca18500fdca83416cc268be1faa6 Mon Sep 17 00:00:00 2001 From: William Tso Date: Wed, 23 Apr 2025 22:38:56 +0800 Subject: [PATCH] Update authentication redirects to use environment variable for site URL, enhancing flexibility for different environments. Add NEXT_PUBLIC_SITE_URL to .env for production URL configuration. --- .env | 4 +++- .env.development | 29 +++++++++++++++++++++++++++++ .env.production | 29 +++++++++++++++++++++++++++++ README-auth-setup.md | 42 ++++++++++++++++++++++++++++++++++++++++++ lib/auth.tsx | 15 ++++++++++++--- 5 files changed, 115 insertions(+), 4 deletions(-) create mode 100644 .env.development create mode 100644 .env.production create mode 100644 README-auth-setup.md diff --git a/.env b/.env index 486c964..7b13ba4 100644 --- a/.env +++ b/.env @@ -24,4 +24,6 @@ NEXT_PUBLIC_SUPABASE_URL="https://mwwvqwevplndzvmqmrxa.supabase.co" NEXT_PUBLIC_SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im13d3Zxd2V2cGxuZHp2bXFtcnhhIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDQzNDU2NDMsImV4cCI6MjA1OTkyMTY0M30.EI7OY0Aq3zYj6fRG_IUn4IlUZ89b0LOg0jb0nMLLKWU" DATABASE_URL="postgresql://postgres.mwwvqwevplndzvmqmrxa:eYYdarJsRL*Z6&p9gD@aws-0-ap-northeast-1.pooler.supabase.com:5432/postgres" -NEXT_PUBLIC_LIMQ_API="https://app.upj.to" \ No newline at end of file +NEXT_PUBLIC_LIMQ_API="https://app.upj.to" +# Application URL for redirects (replace with your production URL) +NEXT_PUBLIC_SITE_URL="https://main.upj.to/login" \ No newline at end of file diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..7b13ba4 --- /dev/null +++ b/.env.development @@ -0,0 +1,29 @@ +PORT=3007 + +# ClickHouse Configuration +CLICKHOUSE_HOST=10.0.1.60 +CLICKHOUSE_PORT=8123 +CLICKHOUSE_USER=admin +CLICKHOUSE_PASSWORD=your_secure_password +CLICKHOUSE_DATABASE=shorturl_analytics +CLICKHOUSE_URL=http://10.0.1.60:8123 + +REDIS_HOST="localhost" +REDIS_PORT="6379" +REDIS_PASSWORD="" + +# Supabase Configuration +SUPABASE_URL="https://mwwvqwevplndzvmqmrxa.supabase.co" +SUPABASE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im13d3Zxd2V2cGxuZHp2bXFtcnhhIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc0NDM0NTY0MywiZXhwIjoyMDU5OTIxNjQzfQ.ZenTsEAdGiDu1DCCOT7G8xxvgFXKLl4qhHB-AhSVf6w" +SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im13d3Zxd2V2cGxuZHp2bXFtcnhhIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDQzNDU2NDMsImV4cCI6MjA1OTkyMTY0M30.EI7OY0Aq3zYj6fRG_IUn4IlUZ89b0LOg0jb0nMLLKWU" +DATABASE_URL="postgresql://postgres.mwwvqwevplndzvmqmrxa:eYYdarJsRL*Z6&p9gD@aws-0-ap-northeast-1.pooler.supabase.com:5432/postgres" + + +# Next.js Public Environment Variables (accessible in browser) +NEXT_PUBLIC_SUPABASE_URL="https://mwwvqwevplndzvmqmrxa.supabase.co" +NEXT_PUBLIC_SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im13d3Zxd2V2cGxuZHp2bXFtcnhhIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDQzNDU2NDMsImV4cCI6MjA1OTkyMTY0M30.EI7OY0Aq3zYj6fRG_IUn4IlUZ89b0LOg0jb0nMLLKWU" +DATABASE_URL="postgresql://postgres.mwwvqwevplndzvmqmrxa:eYYdarJsRL*Z6&p9gD@aws-0-ap-northeast-1.pooler.supabase.com:5432/postgres" + +NEXT_PUBLIC_LIMQ_API="https://app.upj.to" +# Application URL for redirects (replace with your production URL) +NEXT_PUBLIC_SITE_URL="https://main.upj.to/login" \ No newline at end of file diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..7b13ba4 --- /dev/null +++ b/.env.production @@ -0,0 +1,29 @@ +PORT=3007 + +# ClickHouse Configuration +CLICKHOUSE_HOST=10.0.1.60 +CLICKHOUSE_PORT=8123 +CLICKHOUSE_USER=admin +CLICKHOUSE_PASSWORD=your_secure_password +CLICKHOUSE_DATABASE=shorturl_analytics +CLICKHOUSE_URL=http://10.0.1.60:8123 + +REDIS_HOST="localhost" +REDIS_PORT="6379" +REDIS_PASSWORD="" + +# Supabase Configuration +SUPABASE_URL="https://mwwvqwevplndzvmqmrxa.supabase.co" +SUPABASE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im13d3Zxd2V2cGxuZHp2bXFtcnhhIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc0NDM0NTY0MywiZXhwIjoyMDU5OTIxNjQzfQ.ZenTsEAdGiDu1DCCOT7G8xxvgFXKLl4qhHB-AhSVf6w" +SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im13d3Zxd2V2cGxuZHp2bXFtcnhhIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDQzNDU2NDMsImV4cCI6MjA1OTkyMTY0M30.EI7OY0Aq3zYj6fRG_IUn4IlUZ89b0LOg0jb0nMLLKWU" +DATABASE_URL="postgresql://postgres.mwwvqwevplndzvmqmrxa:eYYdarJsRL*Z6&p9gD@aws-0-ap-northeast-1.pooler.supabase.com:5432/postgres" + + +# Next.js Public Environment Variables (accessible in browser) +NEXT_PUBLIC_SUPABASE_URL="https://mwwvqwevplndzvmqmrxa.supabase.co" +NEXT_PUBLIC_SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im13d3Zxd2V2cGxuZHp2bXFtcnhhIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDQzNDU2NDMsImV4cCI6MjA1OTkyMTY0M30.EI7OY0Aq3zYj6fRG_IUn4IlUZ89b0LOg0jb0nMLLKWU" +DATABASE_URL="postgresql://postgres.mwwvqwevplndzvmqmrxa:eYYdarJsRL*Z6&p9gD@aws-0-ap-northeast-1.pooler.supabase.com:5432/postgres" + +NEXT_PUBLIC_LIMQ_API="https://app.upj.to" +# Application URL for redirects (replace with your production URL) +NEXT_PUBLIC_SITE_URL="https://main.upj.to/login" \ No newline at end of file diff --git a/README-auth-setup.md b/README-auth-setup.md new file mode 100644 index 0000000..875af9a --- /dev/null +++ b/README-auth-setup.md @@ -0,0 +1,42 @@ +# 身份验证重定向 URL 配置指南 + +## 问题:注册后确认邮件链接指向 localhost + +如果您在生产环境中使用此应用,并且发现用户注册后收到的确认邮件中的链接指向 `localhost` 而非您的实际网站域名,请按照以下步骤解决: + +## 解决方案 + +### 1. 设置环境变量 + +在项目根目录的 `.env.production` 文件中,确保 `NEXT_PUBLIC_SITE_URL` 变量设置为您的实际生产域名: + +``` +NEXT_PUBLIC_SITE_URL="https://您的真实域名.com" +``` + +### 2. 在 Supabase 控制台中配置 + +登录 [Supabase 控制台](https://app.supabase.com/),然后: + +1. 选择您的项目 +2. 导航到 **Authentication** > **URL Configuration** +3. 在 **Site URL** 字段中输入您的实际网站 URL +4. 在 **Redirect URLs** 部分添加: + - `https://您的真实域名.com/auth/callback` + +### 3. 本地开发与生产环境 + +- **开发环境**:使用 `.env.development` 文件中的设置,通常为 `http://localhost:3007` +- **生产环境**:使用 `.env.production` 文件中的设置,应为您的实际域名 + +### 4. 部署后验证 + +项目重新部署后: +1. 尝试注册一个新账户 +2. 检查收到的确认邮件,确认链接现在指向您的实际域名而非 localhost + +## 技术说明 + +身份验证流程中,应用使用环境变量 `NEXT_PUBLIC_SITE_URL` 构建重定向 URL。如果未设置此变量,它会回退到使用 `window.location.origin`,这在本地开发时会是 `localhost`。 + +通过正确设置此变量,您可以确保无论在何处运行应用,邮件中的链接都能正确指向应用的实际位置。 \ No newline at end of file diff --git a/lib/auth.tsx b/lib/auth.tsx index 266b8d8..9f9f06f 100644 --- a/lib/auth.tsx +++ b/lib/auth.tsx @@ -101,11 +101,14 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children const signInWithGoogle = async () => { setIsLoading(true); try { + // 获取网站 URL,如果环境变量不存在则使用当前来源 + const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || window.location.origin; + // 尝试通过Supabase登录Google const { error } = await supabase.auth.signInWithOAuth({ provider: 'google', options: { - redirectTo: `${window.location.origin}/auth/callback`, + redirectTo: `${siteUrl}/auth/callback`, }, }); @@ -127,11 +130,14 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children const signInWithGitHub = async () => { setIsLoading(true); try { + // 获取网站 URL,如果环境变量不存在则使用当前来源 + const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || window.location.origin; + // 尝试通过Supabase登录GitHub const { error } = await supabase.auth.signInWithOAuth({ provider: 'github', options: { - redirectTo: `${window.location.origin}/auth/callback`, + redirectTo: `${siteUrl}/auth/callback`, }, }); @@ -153,12 +159,15 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children const signUp = async (email: string, password: string) => { setIsLoading(true); try { + // 获取网站 URL,如果环境变量不存在则使用当前来源 + const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || window.location.origin; + // 尝试通过Supabase注册 const { error } = await supabase.auth.signUp({ email, password, options: { - emailRedirectTo: `${window.location.origin}/auth/callback`, + emailRedirectTo: `${siteUrl}/auth/callback`, } });