uni-app uniID.checkToken 一直返回 jwt must be a string

uni-app uniID.checkToken 一直返回 jwt must be a string

操作步骤:

  • 上面已说明

预期结果:

  • 正常验证token

实际结果:

  • jwt must be a string

bug描述:

用云函数路由的方式,在控制器内进行验证客户端token,但是一直返回错误

/**  
 * 验证客户端 token  
 */  
check_token() {  
    const uniIdToken = this.ctx.event.uniIdToken;  
    if (!uniIdToken) return false;  
    // console.log(token);  
    return uniID.checkToken({  
        token: uniIdToken,  
        checkTokenOptions: {  
            needUserInfo: false  
        }  
    }).then((res) => {  
        console.log(res);  
        return (res.code == 0) ? true : false;  
    })  
}

uniIdToken信息

{"uniIdToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI2MWZmZjY1MmQ3NGMzMjAwMDEyNzQxNGMiLCJyb2xlIjpbXSwicGVybWlzc2lvbiI6W10sImlhdCI6MTY0NDE2NDY4NiwiZXhwIjoxNjQ0MTcxODg2fQ.ZifX27O73oZZCI5WIt5aD2V7z6f-g8vmd_jK0SghjTE"}

验证结果

{"code":30204,"err":{"name":"JsonWebTokenError","message":"jwt must be a string"},"errCode":"uni-id-check-token-failed","errMsg":"token校验未通过","msg":"token校验未通过","message":"token校验未通过"}

我就纳闷儿了,这明明就是字符串啊,为什么一直提示不是字符串?


更多关于uni-app uniID.checkToken 一直返回 jwt must be a string的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

好吧,我的锅,眼瞎,参数格式写错了

更多关于uni-app uniID.checkToken 一直返回 jwt must be a string的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据你提供的代码和错误信息,问题可能出在token的传递方式上。虽然你看到的uniIdToken确实是字符串格式,但可能在传递过程中被转换了类型。

建议检查以下几点:

  1. 确保this.ctx.event.uniIdToken确实是字符串类型,可以在check_token方法开头添加:
console.log(typeof uniIdToken);
  1. 如果发现类型不是string,可以强制转换:
const uniIdToken = String(this.ctx.event.uniIdToken);
  1. 检查云函数调用时uniIdToken的传递方式,确保没有被JSON.stringify二次处理。

  2. 如果使用uniCloud.callFunction调用,确保参数传递正确:

uniCloud.callFunction({
  name: 'yourFunction',
  data: {
    uniIdToken: token // 直接传递原始token字符串
  }
})
回到顶部