在 UniApp 中接入 CloudBase 用户认证
一句话定义:用
@cloudbase/adapter-uni-app给@cloudbase/js-sdk注册 UniApp 适配器,然后用auth.signInWithSms/ 微信一键登录拿身份,代码一份跑 H5 / 微信小程序 / 支付宝小程序 / 抖音小程序 / iOS / Android 六端,登录态共享。预计耗时:50 分钟 | 难度:进阶
适用场景
- 适用:团队是 UniApp(Vue3 + Composition API)跨端,想要一份代码同时出 H5、微信小程序、支付宝小程序、抖音小程序、iOS、Android
- 适用:不想为每端重写一套认证,要一套 user 表 + 一套 uid
- 适用:已经在用 add-auth-wechat-miniprogram 的纯小程序方案,现在要扩到多端
- 不适用:纯微信小程序专属业务直接用
wx.cloud,不必上 UniApp 这一层 - 不适用:Flutter / React Native / 鸿蒙原生场景,UniApp 适配器不覆盖,各自有专门 SDK
- 不适用:UniApp x(纯原生编译模式),目前
@cloudbase/adapter-uni-app只支持 UniApp 标准模式
环境要求
| 依赖 | 版本 |
|---|---|
| HBuilderX | 最新稳定版(3.99 及以上) |
| Node.js | ≥ 18 |
@cloudbase/js-sdk | 2.27.3 |
@cloudbase/adapter-uni-app | 1.5.0 |
| Vue | ^3.4.x(Composition API) |
| 编译器 | @vue/compiler-sfc ≥ 3.4,UniApp vite 模板自带 |
另外需要:
- 已开通的 CloudBase 环境 ID,地域选「上海」(短信验证码登录仅支持上海地域)
- 控制台 → 身份认证 → 登录方式,把要用的几种方式开启:
- 「短信验证码登录」(H5 / 支付宝小程序 / 抖音小程序 / App 共用)
- 「微信小程序登录」(在微信小程序端做一键登录用)
- App 端额外要在 环境配置 → 安全来源 → 移动应用安全来源 添加应用,拿
appSign+appAccessKey
短信验证码地域限制
短信登录仅支持上海地域。CloudBase init 时不传 region 默认就是上 海;广州 / 北京环境用不了短信。
第一步:HBuilderX 创建 Vue3 项目,装 SDK
HBuilderX 顶部菜单 文件 → 新建 → 项目 → uni-app,模板选 Vue3 / Vite 版(默认勾选 Composition API)。
在项目根目录装 SDK 和适配器:
npm install @cloudbase/adapter-uni-app @cloudbase/js-sdk
UniApp Vue3 模板默认就有 package.json 和多端编译命令,不用额外配 vite。
第二步:初始化 cloudbase + 注册 adapter
关键:useAdapters 必须在 cloudbase.init 之前调用,顺序错了适配器不生效,SDK 会按浏览器环境跑,小程序端会全线报错。
src/utils/cloudbase.ts:
import cloudbase from '@cloudbase/js-sdk';
import adapter from '@cloudbase/adapter-uni-app';
// 1. 注册 UniApp 适配器,必须传 uni 对象(图形验证码弹窗要用)
const options = {
uni: uni,
};
cloudbase.useAdapters(adapter, options);
// 2. 初始化 SDK
export const app = cloudbase.init({
env: 'your-env-id',
// 仅 App 端(iOS / Android)需要这两项
// H5 / 各家小程序端可以不传或留空
appSign: 'your-app-sign',
appSecret: {
appAccessKeyId: 1,
appAccessKey: 'your-app-access-key',
},
});
export const auth = app.auth({
persistence: 'local', // 登录态本地长存,显式 signOut 才清
});
要点:
uni对象在 UniApp 里是全局可用的,不用 import,直接传给options.uni- App 端缺
appSign/appSecret会在调云函数 / 数据库时报「app sign invalid」 persistence: 'local'在每个端都映射到该端的持久化存储(H5 → localStorage、微信小程序 → wx.setStorage、支付宝 → my.setStorage、抖音 → tt.setStorage、App → uni.setStorage),业务不用关心底层
第三步:微信小程序端配合法域名 + 一键登录
3.1 微信公众平台配置合法域名
微信小程序后台 → 开发 → 开发管理 → 开发设置 → 服务器域名,把以下域名加入白名单(your-env-id 替换成你的环境 ID):
request 合法域名:
https://tcb-api.tencentcloudapi.com
https://your-env-id.service.tcloudbase.com
uploadFile 合法域名:
https://cos.ap-shanghai.myqcloud.com
downloadFile 合法域名:
https://your-env-id.tcb.qcloud.la
https://cos.ap-shanghai.myqcloud.com
域名按你 CloudBase 环境实际所在地域调整(广州环境是 ap-guangzhou,北京环境是 ap-beijing)。