uni-app 使用云函数里ui-id登录后 token没有保存

uni-app 使用云函数里ui-id登录后 token没有保存

项目信息 详细信息
产品分类 uniapp/小程序/微信
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win10
HBuilderX类型 正式
HBuilderX版本号 3.3.3
第三方开发者工具版本号 1.05
基础库版本号 2.21.1
项目创建方式 HBuilderX

操作步骤:

  • 打开小程序后,调用uniID.loginByWeixin方法进行微信登录

预期结果:

  • 登陆成功,返回的token已保存到user表中,并且验证token通过

实际结果:

  • user表中没有token信息

bug描述:

  • 使用云函数开发时,通过uniID.loginByWeixin登录后。再验证token时,提示信息{“code”:30202,“errCode”:“uni-id-token-not-exist”,“errMsg”:“云端已不包含此token”,“msg”:“云端已不包含此token”,“message”:“云端已不包含此token”}

更多关于uni-app 使用云函数里ui-id登录后 token没有保存的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 使用云函数里ui-id登录后 token没有保存的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据你的描述,这是一个典型的token存储问题。问题核心在于云函数执行环境与客户端存储的差异。

主要原因:

  1. 云函数环境隔离:云函数每次执行都是独立环境,uniID.loginByWeixin返回的token默认只保存在云函数内存中,不会自动持久化到数据库。
  2. token存储机制:uni-id默认将token存储在opendb-open-data表的token字段,但需要显式调用保存方法。

解决方案:

方案一:修改云函数返回完整token信息 在云函数中,将登录成功后的token返回给客户端:

// 云函数代码示例
const uniID = require('uni-id')
exports.main = async function(event, context) {
  const res = await uniID.loginByWeixin(event)
  if (res.code === 0) {
    // 返回完整的token信息给客户端
    return {
      code: 0,
      token: res.token,
      tokenExpired: res.tokenExpired,
      userInfo: res.userInfo
    }
  }
  return res
}

方案二:客户端保存token 在客户端调用云函数后,手动保存token:

// 客户端代码
uniCloud.callFunction({
  name: 'your-login-function',
  success: (res) => {
    if (res.result.code === 0) {
      // 保存token到本地存储
      uni.setStorageSync('uni_id_token', res.result.token)
      uni.setStorageSync('uni_id_token_expired', res.result.tokenExpired)
    }
  }
})

方案三:配置uni-id自动保存 在uni-id配置文件中启用token自动保存:

// uni-config-center/uni-id/config.json
{
  "token": {
    "storage": "redis", // 或 "database"
    "autoSaveToStorage": true
  }
}

验证token的正确方式:

// 客户端调用验证
uniCloud.callFunction({
  name: 'uni-id-checkToken',
  data: {
    token: uni.getStorageSync('uni_id_token')
  }
})
回到顶部