[功能开发] NAC 统一注册系统 - OAuth 社交登录集成(Google/Twitter/Facebook/微信) #54

Closed
opened 2026-02-22 21:38:28 +08:00 by nacadmin · 0 comments
Owner

工单说明

本工单为 NAC 统一注册系统(id.newassetchain.io)集成 四大 OAuth 社交平台一键注册/登录 功能的完整开发规划。

关联工单:#52(多语言支持)、#53(KYC 架构规划)


一、需求背景

NAC 公链整个生态系统只有一套注册系统(id.newassetchain.io),所有子系统(一键上链、KYC、钱包、交易所等)均通过此系统进行用户身份验证。为降低用户注册门槛、提升全球用户覆盖率,需要支持以下社交平台的 OAuth 一键注册/登录:

平台 协议 主要用户群 优先级
Google OAuth 2.0 全球 最高
Twitter/X OAuth 2.0 (PKCE) 全球
Facebook OAuth 2.0 全球
微信 OAuth 2.0 中国大陆

二、技术方案

后端(Laravel Socialite)

使用 Laravel Socialite 包处理 OAuth 流程:

composer require laravel/socialite
composer require socialiteproviders/twitter  # Twitter OAuth 2.0
composer require socialiteproviders/weixin   # 微信 OAuth

新增数据库字段(users 表)

  • oauth_provider:oauth 提供商(google/twitter/facebook/weixin/email)
  • oauth_id:第三方平台用户 ID
  • oauth_token:第三方平台 Access Token(加密存储)
  • avatar_url:头像 URL(来自第三方平台)

新增 API 路由

GET  /api/auth/oauth/{provider}           # 跳转到第三方授权页
GET  /api/auth/oauth/{provider}/callback  # OAuth 回调处理
POST /api/auth/oauth/verify               # 子系统 Token 验证端点

前端(Blade 模板)

在注册页和登录页添加社交登录按钮区域,支持 6 种语言文案,阿拉伯语 RTL 布局。


三、OAuth 应用配置(需要申请)

各平台需要申请 OAuth 应用,获取 Client ID 和 Client Secret:

平台 申请地址 回调 URL
Google console.cloud.google.com https://id.newassetchain.io/api/auth/oauth/google/callback
Twitter/X developer.twitter.com https://id.newassetchain.io/api/auth/oauth/twitter/callback
Facebook developers.facebook.com https://id.newassetchain.io/api/auth/oauth/facebook/callback
微信 open.weixin.qq.com https://id.newassetchain.io/api/auth/oauth/weixin/callback

注意:OAuth 应用的 Client ID 和 Secret 需要由运营团队申请并配置到服务器 .env 文件中,开发完成后提供配置模板。


四、用户流程

新用户(首次 OAuth 登录)

  1. 用户点击「Google 登录」按钮
  2. 跳转到 Google 授权页面
  3. 用户授权后,回调到 /api/auth/oauth/google/callback
  4. 系统自动创建用户账号(使用 Google 提供的邮箱、姓名、头像)
  5. 自动在 NAC 链上产生 CBPP 节点,生成 DID
  6. 返回 Sanctum Token,跳转到成功页面

已有账号(绑定 OAuth)

  • 如果 OAuth 邮箱与已有账号邮箱一致,自动绑定并登录
  • 如果邮箱不同,提示用户选择:创建新账号 或 绑定到现有账号

五、安全要求

  • OAuth state 参数防 CSRF 攻击
  • 微信 OAuth 仅在中国大陆 IP 显示(其他地区隐藏微信按钮)
  • 第三方 Token 加密存储(AES-256)
  • 不存储第三方平台密码

六、子系统 Token 验证端点(同步开发)

为支持一键上链等子系统验证注册系统颁发的 Sanctum Token,同步增加:

POST /api/auth/verify
Authorization: Bearer {sanctum_token}

响应:

{
  "success": true,
  "data": {
    "user_id": 1,
    "name": "用户名",
    "email": "user@example.com",
    "did": "did:nac:cbp:...",
    "kyc_level": 0,
    "preferred_language": "zh",
    "is_active": true
  }
}

七、验收标准

  • Google OAuth 登录/注册完整流程可用
  • Twitter/X OAuth 登录/注册完整流程可用
  • Facebook OAuth 登录/注册完整流程可用
  • 微信 OAuth 登录/注册完整流程可用
  • 注册/登录页面显示四个社交登录按钮(6语言文案)
  • 阿拉伯语 RTL 布局正确
  • 新用户 OAuth 注册后自动生成 DID 和 CBPP 节点
  • 已有账号邮箱匹配时自动绑定
  • POST /api/auth/verify 端点正常工作
  • nac-sdk 更新支持 OAuth 和 Token 验证 API
  • 代码同步到 Gitea

八、依赖关系

  • 依赖:#52(多语言支持,已完成)
  • 被依赖:#53(KYC 系统,需要统一 Token 验证)
  • 被依赖:一键上链系统集成(需要 /api/auth/verify 端点)
## 工单说明 本工单为 NAC 统一注册系统(id.newassetchain.io)集成 **四大 OAuth 社交平台一键注册/登录** 功能的完整开发规划。 **关联工单**:#52(多语言支持)、#53(KYC 架构规划) --- ## 一、需求背景 NAC 公链整个生态系统只有一套注册系统(id.newassetchain.io),所有子系统(一键上链、KYC、钱包、交易所等)均通过此系统进行用户身份验证。为降低用户注册门槛、提升全球用户覆盖率,需要支持以下社交平台的 OAuth 一键注册/登录: | 平台 | 协议 | 主要用户群 | 优先级 | |------|------|-----------|--------| | **Google** | OAuth 2.0 | 全球 | 最高 | | **Twitter/X** | OAuth 2.0 (PKCE) | 全球 | 高 | | **Facebook** | OAuth 2.0 | 全球 | 高 | | **微信** | OAuth 2.0 | 中国大陆 | 高 | --- ## 二、技术方案 ### 后端(Laravel Socialite) 使用 **Laravel Socialite** 包处理 OAuth 流程: ``` composer require laravel/socialite composer require socialiteproviders/twitter # Twitter OAuth 2.0 composer require socialiteproviders/weixin # 微信 OAuth ``` **新增数据库字段(users 表)**: - `oauth_provider`:oauth 提供商(google/twitter/facebook/weixin/email) - `oauth_id`:第三方平台用户 ID - `oauth_token`:第三方平台 Access Token(加密存储) - `avatar_url`:头像 URL(来自第三方平台) **新增 API 路由**: ``` GET /api/auth/oauth/{provider} # 跳转到第三方授权页 GET /api/auth/oauth/{provider}/callback # OAuth 回调处理 POST /api/auth/oauth/verify # 子系统 Token 验证端点 ``` ### 前端(Blade 模板) 在注册页和登录页添加社交登录按钮区域,支持 6 种语言文案,阿拉伯语 RTL 布局。 --- ## 三、OAuth 应用配置(需要申请) 各平台需要申请 OAuth 应用,获取 Client ID 和 Client Secret: | 平台 | 申请地址 | 回调 URL | |------|---------|---------| | Google | console.cloud.google.com | https://id.newassetchain.io/api/auth/oauth/google/callback | | Twitter/X | developer.twitter.com | https://id.newassetchain.io/api/auth/oauth/twitter/callback | | Facebook | developers.facebook.com | https://id.newassetchain.io/api/auth/oauth/facebook/callback | | 微信 | open.weixin.qq.com | https://id.newassetchain.io/api/auth/oauth/weixin/callback | > **注意**:OAuth 应用的 Client ID 和 Secret 需要由运营团队申请并配置到服务器 .env 文件中,开发完成后提供配置模板。 --- ## 四、用户流程 ### 新用户(首次 OAuth 登录) 1. 用户点击「Google 登录」按钮 2. 跳转到 Google 授权页面 3. 用户授权后,回调到 /api/auth/oauth/google/callback 4. 系统自动创建用户账号(使用 Google 提供的邮箱、姓名、头像) 5. 自动在 NAC 链上产生 CBPP 节点,生成 DID 6. 返回 Sanctum Token,跳转到成功页面 ### 已有账号(绑定 OAuth) - 如果 OAuth 邮箱与已有账号邮箱一致,自动绑定并登录 - 如果邮箱不同,提示用户选择:创建新账号 或 绑定到现有账号 --- ## 五、安全要求 - OAuth state 参数防 CSRF 攻击 - 微信 OAuth 仅在中国大陆 IP 显示(其他地区隐藏微信按钮) - 第三方 Token 加密存储(AES-256) - 不存储第三方平台密码 --- ## 六、子系统 Token 验证端点(同步开发) 为支持一键上链等子系统验证注册系统颁发的 Sanctum Token,同步增加: ``` POST /api/auth/verify Authorization: Bearer {sanctum_token} ``` 响应: ```json { "success": true, "data": { "user_id": 1, "name": "用户名", "email": "user@example.com", "did": "did:nac:cbp:...", "kyc_level": 0, "preferred_language": "zh", "is_active": true } } ``` --- ## 七、验收标准 - [ ] Google OAuth 登录/注册完整流程可用 - [ ] Twitter/X OAuth 登录/注册完整流程可用 - [ ] Facebook OAuth 登录/注册完整流程可用 - [ ] 微信 OAuth 登录/注册完整流程可用 - [ ] 注册/登录页面显示四个社交登录按钮(6语言文案) - [ ] 阿拉伯语 RTL 布局正确 - [ ] 新用户 OAuth 注册后自动生成 DID 和 CBPP 节点 - [ ] 已有账号邮箱匹配时自动绑定 - [ ] POST /api/auth/verify 端点正常工作 - [ ] nac-sdk 更新支持 OAuth 和 Token 验证 API - [ ] 代码同步到 Gitea --- ## 八、依赖关系 - **依赖**:#52(多语言支持,已完成) - **被依赖**:#53(KYC 系统,需要统一 Token 验证) - **被依赖**:一键上链系统集成(需要 /api/auth/verify 端点)
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: nacadmin/NAC_Blockchain#54
No description provided.