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

6.0 KiB
Raw Blame History

Google OAuth 前端改造指南

📋 改造目标

让Google OAuth注册用户也能享受积分发放和邀请奖励功能。

🔄 新的流程设计

改造后流程

1. 前端接收Google OAuth回调
2. 前端 → Java验证接口只验证不创建用户
3. 前端 → Python注册接口创建用户 + 积分发放)
4. 返回完整的用户信息和token

🛠️ 前端修改步骤

📍 修改文件

文件: video-flow/app/api/auth/google/callback/route.ts

🔧 核心修改

第一步调用Java验证接口

// 调用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注册接口

// 调用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();

第三步:返回统一格式结果

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

请求参数

{
  code: string,              // Google authorization code
  state: string,             // state参数可包含邀请码信息
  inviteCode?: string,       // 邀请码(可选)
  skipUserCreation: boolean  // true=只验证不创建用户
}

成功响应

{
  success: true,
  message: "Google Token验证成功",
  data: {
    email: string,         // 用户邮箱
    name: string,          // 用户姓名
    picture: string,       // 头像URL
    googleId: string,      // Google用户ID
    verified: boolean,     // 是否已验证
    inviteCode: string     // 邀请码(如果有)
  }
}

错误响应

{
  success: false,
  error: "TOKEN_EXCHANGE_FAILED" | "INVALID_ID_TOKEN",
  message: string
}

🔵 Python注册接口

接口地址

POST /api/user_fission/register_with_invite

请求参数

{
  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              // 邀请码(可选)
}

成功响应

{
  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如果有
  }
}

错误响应

{
  successful: false,
  message: string,                 // 错误信息
  detail?: string                  // 详细错误信息
}

🔧 环境变量配置

确保以下环境变量已配置:

# 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返回 successfulJava返回 success
  4. 用户ID字段: Python返回 user_id,前端映射为 userId

🚨 错误处理

  • Java验证失败 → 停止流程,返回错误
  • Python注册失败 → 返回详细错误信息
  • 网络异常 → 提供用户友好提示

🧪 测试检查点

  • Google OAuth验证是否成功
  • 用户是否正确创建并获得积分
  • 邀请码功能是否正常
  • 错误处理是否完善
  • 前端页面跳转是否正常

🎯 预期效果

改造完成后Google OAuth用户将获得

注册奖励积分
邀请码奖励功能
邀请人奖励积分
统一的用户体验
完整的积分记录


文档版本: v2.0
更新时间: 2025-01-22
适用范围: video-flow前端项目