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存储问题。问题核心在于云函数执行环境与客户端存储的差异。
主要原因:
- 云函数环境隔离:云函数每次执行都是独立环境,uniID.loginByWeixin返回的token默认只保存在云函数内存中,不会自动持久化到数据库。
- 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')
}
})

