更新记录

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。

安装前置

  1. wc-request ≥ 2.1.0(token 供应器机制)、pinia
  2. 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

隐私、权限声明

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

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

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

许可协议

MIT协议

暂无用户评论。