更新记录
1.3.0(2026-08-21)
下载此版本
- 新增微信小程序登录分支(与 H5 同一 API,条件编译内部分流):
login() 在 MP-WEIXIN 下走 uni.login → miniLogin 接口换 token,静默无跳转
- 端点 URL 待后端确定(暂用占位,won-passion 项目参照是 /api/app/auth/login)
- token 管理 / 刷新 / 401 重试 / 用户信息两端共用
平台兼容性
uni-app(5.24)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| - |
√ |
- |
- |
- |
- |
- |
- |
- |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| √ |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
uni-app x(5.24)
| Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
| - |
- |
- |
- |
- |
- |
wc-auth
微信登录封装(H5 网页授权 + 微信小程序),基于 wc-request(/core/mobile/user/* 系列接口)。
token 管理(Pinia + storage 持久化)、过期预刷新、401 自动重发重试,两端共用一套 API。
安装前置
wc-request ≥ 2.1.0(token 供应器机制)、pinia
- App 启动配置(main.ts):
import * as Pinia from 'pinia'
import { setupWcAuth } from '@/uni_modules/wc-auth/commons'
import { setBaseURL } from '@/uni_modules/wc-request/commons/request'
export function createApp() {
setBaseURL(import.meta.env.VITE_APP_API_BASE_URL || '')
const app = createSSRApp(App)
app.use(Pinia.createPinia())
// 登录接线:恢复 token、注册请求头供应器与 401 处理、处理回跳 login_code
setupWcAuth()
return { app, Pinia }
}
注意 setupWcAuth 必须在 createPinia 之后调用(依赖 store)。
使用
发起登录(未登录时,两端同一 API)
import { login, useAuthStore } from '@/uni_modules/wc-auth/commons'
const store = useAuthStore()
if (!store.isLoggedIn) {
await login()
// H5 :整页跳转微信授权页 → 回跳本页自动兑换 token
// MP-WEIXIN :uni.login 拿 code → miniLogin 接口换 token(静默完成,无跳转)
}
两端的差异全部被条件编译封装在模块内部:
| 环节 |
H5 |
小程序 |
| 获取凭证 |
授权页回跳 ?login_code= |
uni.login() 临时 code |
| 换 token |
getTokenByLoginCode |
POST /user/miniLogin |
| 页面跳转 |
整页跳转两次(授权页→回跳) |
零跳转,静默 |
| 后续(token 管理/刷新/用户信息) |
完全一致 |
完全一致 |
getAuthorizeUrl 参数说明(GET query 传递;platform 由 server 依 User-Agent 自动判定,前端不传):
| 参数 |
wc-auth 默认 |
说明 |
redirect_url |
当前页面地址 |
登录成功回跳地址(server 存 Redis,5 分钟有效) |
auto_fill_auth_info |
2 |
固定 login_code 回跳模式(server 原默认 1 是中转页 postMessage 模式,与本模块链路不匹配) |
check_uid |
2 |
不强制绑定管理后台用户(=1 时未绑定会跳无权限页) |
scope |
不传(server 默认 snsapi_userinfo) |
授权作用域 |
wcappid |
不传(server 默认 tzWonTech) |
望潮用户中心应用 ID |
登录状态与用户信息
const store = useAuthStore()
store.isLoggedIn // 是否已登录(有 token 且未过期,响应式)
store.access_token // 当前令牌
// 用户信息(昵称/头像/绑定的后台用户),内存缓存于 store,登出自动清空
const user = await getUserInfo() // store 已有直接返回,没有则请求 /user/info
await getUserInfo(true) // 强制刷新(资料修改后)
store.userInfo // 响应式读取,模板直接用
store.userInfo?.systemUser?.realname // 绑定的管理后台用户姓名(未绑定为 null)
登出
import { logout } from '@/uni_modules/wc-auth/commons'
logout()
完整链路(setupWcAuth 之后自动运转的部分)
1. 请求自动带 Authorization: Bearer <access_token>(wc-request 供应器)
2. 预刷新:token 快过期(提前 10 分钟)→ 发请求前先刷新,避免注定 401 的往返
3. 401 自动重发:请求收到 401 → 自动刷新 token(并发去重)→ 重发原请求,
调用方完全无感(表单提交等场景不需要用户重点一次)
4. 微信回跳 URL 带 login_code → 静默兑换 token → 清理 URL 参数
5. refresh_token 也失效 → 清空 token(调用方按 isLoggedIn 引导重新 login)
行为约定
| 场景 |
行为 |
| token 存放 |
Pinia store(id wc-auth)+ uni storage(key wc_auth_token) |
| 过期判断 |
token_time + expires_in,提前 10 分钟视为过期 |
| 401 收到 |
自动刷新(去重);refresh_token 失效则清 token |
| login_code 兑换 |
URL 参数(含 hash 路由 query)自动识别,成功后从 URL 移除 |
| 匿名接口 |
isToken: false 的请求不带 Authorization(登录三接口自身即匿名) |
| 环境 |
授权跳转/URL 处理仅 H5;token 管理与刷新全端可用 |
范围说明
刻意不包含(保持简单):
- 微信 JSSDK 配置(wc-jssdk 的范畴)
- 支付宝 / 望潮账号登录(接口层 getAuthorizeUrl 可传平台参数,链路仅微信)
- 中转页 postMessage 模式(auto_fill_auth_info=1 的服务端方案,走 login_code 模式更可控)
接口一览(server 端点)
| 函数 |
端点 |
getAuthorizeUrl(params) |
GET /core/mobile/user/getAuthorizeUrl |
getTokenByLoginCode(code) |
GET /core/mobile/user/getTokenByLoginCode |
refreshToken(token) |
POST /core/mobile/user/refreshToken |