uni-app 自定义token 报Bug

uni-app 自定义token 报Bug

开发环境 版本号 项目创建方式
uniCloud/App 未知 新建项目

操作步骤:

新建项目 照搬文档配置 custom-token.js
https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=custom-token

预期结果:

token包含customField

实际结果:

code: "INVOKE_FUNCTION_FAILED"  
message: "custom-token.js应导出一个function"  
stack: "Error: custom-token.js应导出一个function..."

bug描述:

新建项目 照搬文档配置 custom-token.js

提示错误"custom-token.js应导出一个function"

去掉async后可运行,但如何 uniCloud.database().collection(‘opendb-department’) 获取其他信息?

查询uni-id源码
uni-token.js—72行发现

const customToken = this.interceptorMap.get('customToken')  
  if (getType(customToken) !== 'function') {  
    throw new Error('custom-token.js应导出一个function')  
  }

官方是否考虑改为类似如下来兼容?
或者请教,当前情况下,如何uniCloud.database().collection(‘opendb-department’)

getType(customToken) !== 'function' && getType(customToken) !== 'asyncfunction'

更多关于uni-app 自定义token 报Bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

Bug已确认,感谢反馈

更多关于uni-app 自定义token 报Bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据你的描述,问题在于uni-id的token验证逻辑只检查了普通函数类型,未兼容async函数。

当前解决方案:

  1. 将custom-token.js改为同步函数,在函数内部使用Promise同步处理数据库查询
module.exports = function(tokenObj) {
  return new Promise((resolve) => {
    uniCloud.database().collection('opendb-department')
      .get()
      .then(res => {
        tokenObj.customField = 'your_value'
        resolve(tokenObj)
      })
  })
}
回到顶部