PHPackages                             motong/oauth - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. motong/oauth

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

motong/oauth
============

motong oauth module

1.0.0(9mo ago)00MITPHPPHP &gt;=7.3

Since Aug 6Pushed 7mo agoCompare

[ Source](https://github.com/MotongAdmin/MotongOAuth)[ Packagist](https://packagist.org/packages/motong/oauth)[ RSS](/packages/motong-oauth/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (7)Versions (2)Used By (0)

Motong OAuth 第三方登录模块
====================

[](#motong-oauth-第三方登录模块)

基于 Hyperf 框架的通用第三方登录模块，支持多种OAuth平台的接入。

功能特性
----

[](#功能特性)

- 🚀 **通用设计**: 支持多种第三方OAuth平台，易于扩展
- 🔐 **安全可靠**: 完整的OAuth2.0流程实现，支持state防CSRF攻击
- 🎯 **多端支持**: 同时支持Web端、小程序端、App端
- 📊 **完整日志**: 详细的登录日志记录和统计分析
- ⚙️ **灵活配置**: 支持多环境、多租户的配置管理
- 🔄 **用户绑定**: 支持用户绑定/解绑多个第三方账号

支持的平台
-----

[](#支持的平台)

### 第一期已实现

[](#第一期已实现)

- ✅ **微信小程序登录** - 完整实现

### 计划支持

[](#计划支持)

- 📋 微信公众号网页授权
- 📋 微信开放平台App登录
- 📋 支付宝网页/小程序/App登录
- 📋 QQ互联登录
- 📋 新浪微博登录
- 📋 钉钉企业登录
- 📋 GitHub/GitLab/Gitee开发者登录

目录结构
----

[](#目录结构)

```
oauth/
├── assets/
│   └── database.sql                     # 数据库表结构
├── Constants/
│   ├── OAuthPlatformConstants.php       # 平台类型常量
│   └── OAuthClientTypeConstants.php     # 客户端类型常量
├── Model/
│   ├── SysOAuthConfig.php               # OAuth配置模型
│   ├── UserOAuthBind.php                # 用户绑定模型
│   ├── OAuthAuthState.php               # 授权状态模型
│   └── OAuthLoginLog.php                # 登录日志模型
├── Service/
│   ├── Provider/
│   │   ├── AbstractOAuthProvider.php    # OAuth提供者抽象基类
│   │   └── WeChatMiniappProvider.php    # 微信小程序提供者
│   ├── Admin/
│   │   └── System/
│   │       └── OAuthConfigService.php   # 配置管理服务（管理后台）
│   ├── OAuthConfigService.php           # 配置基础服务（认证用）
│   ├── OAuthAuthService.php             # 认证服务
│   └── UserOAuthBindService.php         # 绑定服务
├── Controller/
│   ├── Common/
│   │   └── OAuthController.php          # OAuth认证控制器（公共）
│   └── Admin/
│       └── System/
│           └── OAuthConfigController.php # OAuth配置管理控制器（管理后台）
└── README.md                            # 说明文档

```

安装和配置
-----

[](#安装和配置)

### 1. 导入数据库表结构

[](#1-导入数据库表结构)

```
# 执行 assets/database.sql 中的SQL语句
mysql -u username -p database_name  {
    if (res.code) {
      // 调用后端登录接口
      this.loginWithCode(res.code);
    }
  }
});
```

#### 2. 调用后端登录接口

[](#2-调用后端登录接口)

```
// 调用OAuth登录接口
const response = await fetch('/api/oauth/loginByCode', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    platform: 'wechat_miniapp',
    code: loginCode,
    state: '' // 小程序登录可选
  })
});

const result = await response.json();
if (result.code === 200) {
  // 登录成功，保存token
  wx.setStorageSync('token', result.data.token);
  // 跳转到主页
  wx.switchTab({ url: '/pages/index/index' });
}
```

### Web端第三方登录

[](#web端第三方登录)

#### 1. 获取授权URL

[](#1-获取授权url)

```
// 获取授权URL
const response = await fetch('/api/oauth/getAuthUrl', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    platform: 'wechat_mp',
    client_type: 'web',
    action: 'login',
    redirect_url: 'https://yourdomain.com/dashboard'
  })
});

const result = await response.json();
if (result.code === 200) {
  // 跳转到第三方授权页面
  window.location.href = result.data.auth_url;
}
```

#### 2. 处理授权回调

[](#2-处理授权回调)

```
// 在回调页面处理授权结果
const urlParams = new URLSearchParams(window.location.search);
const code = urlParams.get('code');
const state = urlParams.get('state');

if (code && state) {
  // 调用登录接口
  const response = await fetch('/api/oauth/loginByCode', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      platform: 'wechat_mp',
      code: code,
      state: state
    })
  });

  const result = await response.json();
  if (result.code === 200) {
    // 登录成功
    localStorage.setItem('token', result.data.token);
    window.location.href = '/dashboard';
  }
}
```

### 绑定第三方账号

[](#绑定第三方账号)

```
// 已登录用户绑定第三方账号
const response = await fetch('/api/oauth/bindAccount', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + token
  },
  body: JSON.stringify({
    platform: 'wechat_mp',
    code: authCode,
    state: stateParam
  })
});

const result = await response.json();
if (result.code === 200) {
  alert('绑定成功');
}
```

API接口说明
-------

[](#api接口说明)

### 公共接口（遵循ZGW协议）

[](#公共接口遵循zgw协议)

ZGW接口名说明HTTP路径Controller方法common.oauth.getAuthUrl获取OAuth授权URL/common/oauth/getAuthUrlgetAuthUrl()common.oauth.loginByCodeOAuth登录/common/oauth/loginByCodeloginByCode()common.oauth.bindAccount绑定第三方账号⚡/common/oauth/bindAccountbindAccount()common.oauth.unbindAccount解绑第三方账号⚡/common/oauth/unbindAccountunbindAccount()common.oauth.getBindList获取绑定列表⚡/common/oauth/getBindListgetBindList()common.oauth.refreshToken刷新访问令牌⚡/common/oauth/refreshTokenrefreshToken()common.oauth.wechatMiniappLogin微信小程序专用登录/common/oauth/wechatMiniappLoginwechatMiniappLogin()common.oauth.getSupportedPlatforms获取支持的平台/common/oauth/getSupportedPlatformsgetSupportedPlatforms()> ⚡ 标记的接口需要用户登录（JWT认证）

### 管理后台接口（遵循ZGW协议）

[](#管理后台接口遵循zgw协议)

ZGW接口名说明HTTP路径Controller方法admin.oauthConfig.getList获取配置列表/admin/oauth-config/getListgetList()admin.oauthConfig.getDetail获取配置详情/admin/oauth-config/getDetailgetDetail()admin.oauthConfig.create创建配置/admin/oauth-config/createcreate()admin.oauthConfig.update更新配置/admin/oauth-config/updateupdate()admin.oauthConfig.delete删除配置/admin/oauth-config/deletedelete()admin.oauthConfig.enable启用配置/admin/oauth-config/enableenable()admin.oauthConfig.disable禁用配置/admin/oauth-config/disabledisable()admin.oauthConfig.testConnection测试连接/admin/oauth-config/testConnectiontestConnection()admin.oauthConfig.getSupportedOptions获取支持选项/admin/oauth-config/getSupportedOptionsgetSupportedOptions()admin.oauthConfig.batchAction批量操作/admin/oauth-config/batchActionbatchAction()数据库表说明
------

[](#数据库表说明)

### sys\_oauth\_config - OAuth配置表

[](#sys_oauth_config---oauth配置表)

存储各个第三方平台的OAuth配置信息。

### user\_oauth\_bind - 用户绑定表

[](#user_oauth_bind---用户绑定表)

存储用户与第三方账号的绑定关系。

### oauth\_auth\_state - 授权状态表

[](#oauth_auth_state---授权状态表)

存储OAuth授权过程中的state参数，防止CSRF攻击。

### oauth\_login\_log - 登录日志表

[](#oauth_login_log---登录日志表)

记录所有OAuth相关操作的详细日志。

扩展新平台
-----

[](#扩展新平台)

### 1. 创建新的Provider

[](#1-创建新的provider)

```
