uni-app 云对象url化时 checkToken报错 "Check token failed"

发布于 1周前 作者 bupafengyu 来自 Uni-App

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的生成和验证逻辑。

回到顶部