不够,uniCloud.auth().createToken()生成的纯服务端JWT不含用户登录态上下文,无法被uni-app客户端识别;必须使用uni-id体系实现跨多端统一身份认证,因其封装平台差异适配、token自动刷新及多端session同步能力。

uniCloud云函数中调用uniCloud.auth().createToken()生成token是否够用?
不够。直接调用uniCloud.auth().createToken()生成的token是纯服务端签发的JWT,不含用户登录态上下文,也无法被uni-app客户端的uni.login({provider: 'univerify'})或uni.getUserInfo()识别——它只适用于服务端间调用或自定义鉴权逻辑。真正实现“跨多端统一身份认证”,必须走uniCloud内置的uni-id体系。
为什么必须启用uni-id而不是自己手写登录逻辑?
因为uni-id封装了三类关键能力:平台差异适配(如微信小程序用code2Session、App用uni.getProvider获取设备指纹、H5用uni.login({provider: 'oauth'}))、token自动刷新机制、以及多端session同步策略。自己手写极易踩坑:
- 微信小程序里
uni.login()返回的code未及时传给云函数,导致code过期(5分钟) - H5端用
localStorage存token,但App端用uni.setStorageSync(),两者不互通,用户在H5登录后切到App仍需重新登录 - 未处理
uni-id的loginState过期回调,导致静默续签失败,用户操作时突然跳回登录页
uni-id-pages插件能省掉哪些重复工作?
它不是“可选插件”,而是官方推荐的最小可行方案。启用后自动完成:
- 预置标准登录页(含微信/支付宝/手机号验证码三入口),支持条件编译:
#ifdef MP-WEIXIN自动显示微信按钮,#ifdef APP-PLUS自动启用设备指纹绑定 - 云函数侧已内置
uni-id-co,所有uniCloud.callFunction({name: 'uni-id-co'})调用都默认走uni-id鉴权流程 - 客户端
uni.login({provider: 'univerify'})成功后,自动将token写入uni.getStorageSync('uni_id_token')并设置expires_in时间戳,后续所有uni.request会自动携带Authorization头
你唯一要做的,是在manifest.json里开启uni-id服务,并在云服务空间部署uni-id-co云函数。
多端token不一致的根本原因和修复点
常见现象是:用户在微信小程序登录后,打开H5页面却提示未登录。这不是bug,而是uni-id默认按platform + client_id隔离session。修复只需两步:
- 在
uni-id配置中显式关闭平台隔离:"platformIsolation": false(位于uniCloud/cloudfunctions/uni-id/config.json) - 确保所有端共用同一套
uni-id云函数部署,且client_id统一(例如H5和App都设为webapp)
注意:platformIsolation: false不等于安全降级——uni-id仍校验sign签名和timestamp时效性,只是把不同端的登录态映射到同一个user_id下。


















