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 回复
根据你的描述,问题在于uni-id的token验证逻辑只检查了普通函数类型,未兼容async函数。
当前解决方案:
- 将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)
})
})
}

