uni-app 云对象url化时 checkToken报错 "Check token failed"
uni-app 云对象url化时 checkToken报错 “Check token failed”
示例代码:
const cloudTest = async () => {
await uni.request({
url: baseUrl + '/order/test',
method: 'POST',
data: {
token: uni.getStorageSync('uni_id_token')
}
}).then((res) => {
console.log('cloudTest', res);
})
}
_before: function () { // 通用预处理器
this.startTime = Date.now()
this.uniID = uniID.createInstance({ // 创建uni-id实例,其上方法同uniID
clientInfo: this.getClientInfo()
})
if(this.getHttpInfo().body) {
params = JSON.parse(this.getHttpInfo().body)
}
query = this.getHttpInfo().queryStringParameters
dbJQL = uniCloud.databaseForJQL({ // 获取JQL database引用,此处需要传入云对象的clientInfo
clientInfo: this.getClientInfo()
})
},
test: async function () {
let {token} = params;
const res = await this.uniID.checkToken(token)
return {
token,
res
}
},
操作步骤:
如代码示例中所示
预期结果:
token校验返回uid等
实际结果:
code: 30202
errCode: "uni-id-check-token-failed"
errMsg: "Check token failed"
bug描述:
checkToken报错,如何解决
code: 30202
errCode: "uni-id-check-token-failed"
errMsg: "Check token failed"
4 回复
按照你的代码 test 函数内 params 变量应该不存在吧
params 变量是存在的
解决了,把uni-id相关的云对象全都覆盖了,checkToken不报错了
在处理uni-app云对象URL化时遇到的“Check token failed”错误,通常是因为生成的访问令牌(token)无效或已过期。这里我将提供一个基本的示例代码,展示如何正确生成和验证令牌,以及如何调用云对象。请确保你的uni-app项目已经正确配置了云开发环境。
1. 获取和验证Token
首先,你需要从云函数获取一个有效的token。这里假设你有一个名为getAuthToken
的云函数,用于生成token。
云函数 getAuthToken(示例)
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
const db = cloud.database()
// 假设你有一个表用于存储令牌信息
const tokenData = await db.collection('tokens').doc('your-doc-id').get()
const token = tokenData.data[0].token // 从数据库中获取有效token
return {
token: token
}
}
前端代码调用云函数并获取Token
uni.cloud.callFunction({
name: 'getAuthToken',
success: res => {
const token = res.result.token;
// 使用获取的token进行后续操作
callCloudObjectWithToken(token);
},
fail: err => {
console.error('获取token失败', err);
}
});
2. 使用Token调用云对象
在调用云对象时,需要将token作为请求的一部分传递。
前端代码调用云对象
function callCloudObjectWithToken(token) {
uni.cloud.httpRequest({
url: 'https://your-cloud-function-url.com/your-cloud-object', // 替换为你的云对象URL
method: 'GET', // 或POST,取决于你的云对象配置
header: {
'Authorization': `Bearer ${token}` // 在请求头中添加token
},
success: (res) => {
console.log('云对象调用成功', res.data);
},
fail: (err) => {
console.error('云对象调用失败', err);
if (err.statusCode === 401) {
console.error('Token无效或已过期');
}
}
});
}
注意事项
- 确保你的云函数和云对象已经正确配置并部署。
- 检查
token
的生成逻辑,确保它是有效的且未过期。 - 调试时,可以在云函数和前端代码中添加更多的日志输出,以帮助定位问题。
- 考虑到安全性,不要将敏感信息硬编码在代码中,尤其是在客户端。
通过上述步骤,你应该能够解决“Check token failed”的问题,并成功调用云对象。如果问题依旧存在,可能需要进一步检查token的生成和验证逻辑。