Files
DinQuant/docs/OAUTH_CONFIG_CN.md
T

228 lines
6.4 KiB
Markdown
Raw Normal View History

# OAuth 第三方登录配置指南
本文档介绍如何配置 Google 和 GitHub 第三方登录,以及 Cloudflare Turnstile 人机验证。
## 目录
- [Google OAuth 配置](#google-oauth-配置)
- [GitHub OAuth 配置](#github-oauth-配置)
- [Cloudflare Turnstile 配置](#cloudflare-turnstile-配置)
- [部署配置说明](#部署配置说明)
- [常见问题](#常见问题)
---
## Google OAuth 配置
### 步骤 1:创建 Google Cloud 项目
1. 访问 [Google Cloud Console](https://console.cloud.google.com/)
2. 点击顶部的项目选择器,然后点击「新建项目」
3. 输入项目名称(如 `QuantDinger`),点击「创建」
### 步骤 2:配置 OAuth 同意屏幕
1. 在左侧菜单中,选择「API 和服务」→「OAuth 同意屏幕」
2. 选择用户类型:
- **外部**:允许任何 Google 账户登录(推荐)
- **内部**:仅限组织内用户(需要 Google Workspace
3. 填写应用信息:
- 应用名称:`QuantDinger`
- 用户支持电子邮件:您的邮箱
- 开发者联系信息:您的邮箱
4. 点击「保存并继续」,跳过「范围」和「测试用户」,完成配置
### 步骤 3:创建 OAuth 2.0 客户端 ID
1. 在左侧菜单中,选择「API 和服务」→「凭据」
2. 点击「+ 创建凭据」→「OAuth 客户端 ID」
3. 选择应用类型:**Web 应用**
4. 填写名称:`QuantDinger Web Client`
5. 添加「已授权的重定向 URI」:
```
http://localhost:5000/api/auth/oauth/google/callback
```
> 部署到服务器后,需要添加生产环境的 URI(见下文)
6. 点击「创建」
7. 复制生成的 **客户端 ID** 和 **客户端密钥**
### 步骤 4:配置 .env 文件
```bash
# Google OAuth
GOOGLE_CLIENT_ID=你的客户端ID.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=你的客户端密钥
GOOGLE_REDIRECT_URI=http://localhost:5000/api/auth/oauth/google/callback
```
---
## GitHub OAuth 配置
### 步骤 1:创建 GitHub OAuth App
1. 访问 [GitHub Developer Settings](https://github.com/settings/developers)
2. 点击「OAuth Apps」→「New OAuth App」
3. 填写应用信息:
- **Application name**`QuantDinger`
- **Homepage URL**`http://localhost:8080`(或您的域名)
- **Authorization callback URL**
```
http://localhost:5000/api/auth/oauth/github/callback
```
4. 点击「Register application」
### 步骤 2:获取凭据
1. 在应用详情页面,复制 **Client ID**
2. 点击「Generate a new client secret」生成密钥
3. 立即复制 **Client Secret**(只显示一次)
### 步骤 3:配置 .env 文件
```bash
# GitHub OAuth
GITHUB_CLIENT_ID=你的Client_ID
GITHUB_CLIENT_SECRET=你的Client_Secret
GITHUB_REDIRECT_URI=http://localhost:5000/api/auth/oauth/github/callback
```
---
## Cloudflare Turnstile 配置
Turnstile 是 Cloudflare 提供的免费、隐私友好的人机验证服务,用于防止机器人攻击。
### 步骤 1:创建 Turnstile Widget
1. 访问 [Cloudflare Turnstile](https://dash.cloudflare.com/?to=/:account/turnstile)
2. 点击「Add site」
3. 填写信息:
- **Site name**`QuantDinger`
- **Domain**:添加您的域名(本地开发可添加 `localhost`
- **Widget Mode**:选择 `Managed`(推荐)或 `Invisible`
4. 点击「Create」
### 步骤 2:获取密钥
创建成功后,您将看到:
- **Site Key**:前端使用,可公开
- **Secret Key**:后端使用,需保密
### 步骤 3:配置 .env 文件
```bash
# Cloudflare Turnstile
TURNSTILE_SITE_KEY=你的Site_Key
TURNSTILE_SECRET_KEY=你的Secret_Key
```
---
## 部署配置说明
当您将应用部署到服务器并绑定域名时,需要更新配置。
### 场景 1:前后端同域(推荐)
假设您的域名是 `yourdomain.com`,前后端通过 nginx 反向代理部署在同一域名下:
- 前端:`https://yourdomain.com`
- 后端 API`https://yourdomain.com/api`
**.env 配置:**
```bash
# 前端地址(OAuth 成功后跳转)
FRONTEND_URL=https://yourdomain.com
# Google OAuth
GOOGLE_REDIRECT_URI=https://yourdomain.com/api/auth/oauth/google/callback
# GitHub OAuth
GITHUB_REDIRECT_URI=https://yourdomain.com/api/auth/oauth/github/callback
```
### 场景 2:前后端分离域名
假设:
- 前端:`https://yourdomain.com`
- 后端 API`https://api.yourdomain.com`
**.env 配置:**
```bash
FRONTEND_URL=https://yourdomain.com
GOOGLE_REDIRECT_URI=https://api.yourdomain.com/api/auth/oauth/google/callback
GITHUB_REDIRECT_URI=https://api.yourdomain.com/api/auth/oauth/github/callback
```
### 更新 OAuth 提供商配置
部署后,您还需要在 OAuth 提供商后台更新回调地址:
**Google Cloud Console**
1. 访问「凭据」页面
2. 编辑您的 OAuth 客户端
3. 在「已授权的重定向 URI」中添加生产环境地址:
```
https://yourdomain.com/api/auth/oauth/google/callback
```
**GitHub Developer Settings**
1. 编辑您的 OAuth App
2. 更新「Authorization callback URL」为生产环境地址
### Turnstile 域名配置
在 Cloudflare Turnstile 控制台中,确保添加了您的生产域名:
- `yourdomain.com`
- `www.yourdomain.com`(如果使用)
---
## 常见问题
### Q: OAuth 登录跳转后显示错误「redirect_uri_mismatch」
**A:** 回调地址不匹配。请检查:
1. `.env` 中的 `GOOGLE_REDIRECT_URI` 或 `GITHUB_REDIRECT_URI`
2. OAuth 提供商后台配置的回调地址
3. 两者必须完全一致(包括 http/https、端口、路径)
### Q: Turnstile 验证一直失败
**A:** 请检查:
1. `TURNSTILE_SITE_KEY` 和 `TURNSTILE_SECRET_KEY` 是否正确
2. 当前域名是否已添加到 Turnstile 的域名列表
3. 本地开发时,确保添加了 `localhost`
### Q: 如何禁用第三方登录?
**A:** 在 `.env` 中留空相关配置即可:
```bash
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
```
系统会自动隐藏第三方登录按钮。
### Q: 如何禁用用户注册?
**A:** 在 `.env` 中设置:
```bash
ENABLE_REGISTRATION=false
```
### Q: OAuth 登录成功但无法跳转回前端
**A:** 请检查 `FRONTEND_URL` 配置是否正确,确保是前端页面的完整地址(包含协议)。
---
## 相关链接
- [Google Cloud Console](https://console.cloud.google.com/apis/credentials)
- [GitHub Developer Settings](https://github.com/settings/developers)
- [Cloudflare Turnstile](https://dash.cloudflare.com/?to=/:account/turnstile)