更新记录

1.0.0(2026-07-06)

  • 新增 X OAuth2 Authorization Code Flow with PKCE 授权 URL 生成。
  • 新增本地缓存 state / codeVerifier 与回调校验工具。
  • 新增 deep link 回调文本解析工具。
  • 新增 Android / iOS 打开授权 URL 的工具方法。
  • 新增 demo 页面、H5 回调页模板和流程文档。

平台兼容性

uni-app(4.76)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× × 6.0 12 ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(4.76)

Chrome Safari Android iOS 鸿蒙 微信小程序
6.0 12 × ×

x-login

x-login 是一个 uni-app x UTS 工具插件,用于接入 X OAuth2 Authorization Code Flow with PKCE。

插件负责:

  • 生成 X 授权 URL
  • 生成并本地缓存 statecodeVerifier
  • 打开授权 URL
  • 解析 HTTPS 回调页唤回 App 后携带的 code/state/error

插件不负责:

  • 向 X token endpoint 换取 access token
  • 请求你的业务后端
  • 保存业务登录态

平台支持

平台 支持情况 说明
App-Android 支持 可打开授权 URL,需配置自定义 scheme
App-iOS 支持 可打开授权 URL,需配置 URL Scheme
Web 支持工具函数 可生成和解析 URL
小程序 不支持 OAuth 回跳和外部浏览器能力受限

安装

将插件目录放入项目:

uni_modules/x-login

X 后台配置

  1. 在 X Developer Portal 创建或选择 App。
  2. 开启 OAuth 2.0。
  3. 获取 Client ID。
  4. 配置 HTTPS Callback / Redirect URI,例如:
https://your-domain.com/x-oauth-callback.html
  1. 把插件里的 static/h5/x-oauth-callback.html 部署到该 HTTPS 地址。
  2. 在回调页中替换 APP_SCHEME、Android 包名等参数。

App scheme 配置

宿主 App 需要配置自定义 scheme,例如 myapp

{
  "app-android": {
    "distribute": {
      "schemes": "myapp",
      "urlschemes": ["myapp"]
    }
  },
  "app-ios": {
    "distribute": {
      "urlschemes": ["myapp"]
    }
  }
}

回调页会把 X 的 HTTPS 回调转换为:

myapp://oauth-callback?code=...&state=...&oauth_source=x

调用示例

import { getXLogin, openXLoginUrl } from '@/uni_modules/x-login'

const x = getXLogin()
const auth = x.createAuthorizeUrl({
  clientId: '你的 X OAuth2 Client ID',
  redirectUri: 'https://your-domain.com/x-oauth-callback.html',
  scopes: ['tweet.read', 'users.read', 'offline.access'],
  codeChallengeMethod: 'plain'
})

openXLoginUrl(auth.authorizeUrl)

App 被 scheme 唤醒后,从 onLaunch / onShow 的参数或 Android intent data 中取得原始文本,再调用:

const payload = getXLogin().extractCallbackFromText(text)
if (payload != null && payload.error == null) {
  if (getXLogin().verifyState(payload.state ?? '')) {
    const codeVerifier = getXLogin().getPendingCodeVerifier()
    // 把 payload.code 和 codeVerifier 提交给业务服务端换取登录态。
  }
}

API

createAuthorizeUrl(options)

生成授权 URL,并保存本次 statecodeVerifier

参数 类型 必填 说明
clientId string X OAuth2 Client ID
redirectUri string X 后台配置的 HTTPS Redirect URI
scopes string[] 默认 tweet.read users.read offline.access
state string 不传则自动生成 x_ 前缀 state
codeVerifier string 不传则自动生成
codeChallenge string 不传时等于 codeVerifier
codeChallengeMethod string 默认 plain,可传 S256
forceLogin boolean 是否强制重新登录

parseCallbackUrl(url)

解析标准 URL 中的 codestateerror

extractCallbackFromText(text)

从 App 启动参数、Android intent data 或 JSON 文本中提取 X 回调参数。

verifyState(state)

校验回调 state 是否等于本地缓存 state。

getPendingCodeVerifier()

读取本次授权保存的 codeVerifier,用于服务端换 token。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无系统权限申请;宿主 App 需要配置自定义 scheme,H5 回调页需要部署到 X Developer Portal 配置的 HTTPS Redirect URI。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件本身不采集、不上传用户数据;仅在本地缓存 OAuth state 与 codeVerifier,用于校验回调。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。