video-flow-b/docs/jiekou.md
2025-09-22 22:09:49 +08:00

241 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Google OAuth 前端改造指南
## 📋 改造目标
让Google OAuth注册用户也能享受积分发放和邀请奖励功能。
## 🔄 新的流程设计
### **改造后流程**
```
1. 前端接收Google OAuth回调
2. 前端 → Java验证接口只验证不创建用户
3. 前端 → Python注册接口创建用户 + 积分发放)
4. 返回完整的用户信息和token
```
---
## 🛠️ 前端修改步骤
### 📍 修改文件
**文件**: `video-flow/app/api/auth/google/callback/route.ts`
### 🔧 核心修改
#### **第一步调用Java验证接口**
```typescript
// 调用Java callback进行Google Token验证不创建用户
const javaBaseUrl = process.env.NEXT_PUBLIC_JAVA_URL || 'https://auth.test.movieflow.ai';
const verifyResponse = await fetch(`${javaBaseUrl}/api/auth/google/callback`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
},
body: JSON.stringify({
code: code, // Google authorization code
state: state, // state参数
inviteCode: inviteCode, // 邀请码
skipUserCreation: true // 🔑 关键:只验证不创建用户
})
});
const verifyResult = await verifyResponse.json();
```
#### **第二步调用Python注册接口**
```typescript
// 调用Python注册接口进行用户创建和积分发放
const smartvideoBaseUrl = process.env.NEXT_PUBLIC_SMARTVIDEO_URL || 'https://smartvideo.test.movieflow.ai';
const registerResponse = await fetch(`${smartvideoBaseUrl}/api/user_fission/register_with_invite`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
},
body: JSON.stringify({
email: verifyResult.data.email,
name: verifyResult.data.name,
auth_type: 'GOOGLE',
google_user_info: verifyResult.data,
invite_code: inviteCode || stateData.inviteCode || undefined
})
});
const registerResult = await registerResponse.json();
```
#### **第三步:返回统一格式结果**
```typescript
return NextResponse.json({
success: true,
data: {
token: registerResult.data.token,
user: {
userId: registerResult.data.user_id,
userName: registerResult.data.name,
name: registerResult.data.name,
email: registerResult.data.email,
authType: registerResult.data.auth_type,
isNewUser: true
},
message: 'Google OAuth registration successful with credit rewards'
}
});
```
---
## 📚 后端接口文档
### 🔵 Java验证接口
#### **接口地址**
```
POST /api/auth/google/callback
```
#### **请求参数**
```typescript
{
code: string, // Google authorization code
state: string, // state参数可包含邀请码信息
inviteCode?: string, // 邀请码(可选)
skipUserCreation: boolean // true=只验证不创建用户
}
```
#### **成功响应**
```typescript
{
success: true,
message: "Google Token验证成功",
data: {
email: string, // 用户邮箱
name: string, // 用户姓名
picture: string, // 头像URL
googleId: string, // Google用户ID
verified: boolean, // 是否已验证
inviteCode: string // 邀请码(如果有)
}
}
```
#### **错误响应**
```typescript
{
success: false,
error: "TOKEN_EXCHANGE_FAILED" | "INVALID_ID_TOKEN",
message: string
}
```
---
### 🔵 Python注册接口
#### **接口地址**
```
POST /api/user_fission/register_with_invite
```
#### **请求参数**
```typescript
{
email: string, // 用户邮箱
name?: string, // 用户姓名(可选)
auth_type: "GOOGLE", // 认证类型固定为GOOGLE
google_user_info: { // Google用户信息来自Java验证接口
email: string,
name: string,
picture: string,
googleId: string,
verified: boolean,
inviteCode?: string
},
invite_code?: string // 邀请码(可选)
}
```
#### **成功响应**
```typescript
{
successful: true, // 注意:是 successful 不是 success
message: "Google OAuth注册成功",
data: {
user_id: string, // 用户IDUUID格式
email: string, // 用户邮箱
name: string, // 用户姓名
auth_type: "GOOGLE", // 认证类型
invite_code?: string, // 邀请码
token?: string // 认证token如果有
}
}
```
#### **错误响应**
```typescript
{
successful: false,
message: string, // 错误信息
detail?: string // 详细错误信息
}
```
---
## 🔧 环境变量配置
确保以下环境变量已配置:
```bash
# Java认证服务地址
NEXT_PUBLIC_JAVA_URL=https://auth.test.movieflow.ai
# Python积分服务地址
NEXT_PUBLIC_SMARTVIDEO_URL=https://smartvideo.test.movieflow.ai
```
---
## ⚠️ 重要注意事项
### 🔍 **关键变更**
1. **接口变更**: `/api/auth/google/login``/api/auth/google/callback`
2. **参数变更**:
- 移除: `idToken`, `action`
- 新增: `code`, `state`, `skipUserCreation: true`
3. **响应字段**: Python返回 `successful`Java返回 `success`
4. **用户ID字段**: Python返回 `user_id`,前端映射为 `userId`
### 🚨 **错误处理**
- Java验证失败 → 停止流程,返回错误
- Python注册失败 → 返回详细错误信息
- 网络异常 → 提供用户友好提示
### 🧪 **测试检查点**
- [ ] Google OAuth验证是否成功
- [ ] 用户是否正确创建并获得积分
- [ ] 邀请码功能是否正常
- [ ] 错误处理是否完善
- [ ] 前端页面跳转是否正常
---
## 🎯 预期效果
改造完成后Google OAuth用户将获得
**注册奖励积分**
**邀请码奖励功能**
**邀请人奖励积分**
**统一的用户体验**
**完整的积分记录**
---
*文档版本: v2.0*
*更新时间: 2025-01-22*
*适用范围: video-flow前端项目*