linnian
linnian
  • 发布:3 天前
  • 更新:1 天前
  • 阅读:82

【报Bug】重大bug,ui-id的token校验问题

分类:uniCloud

产品分类: uniCloud/App

操作步骤:
  1. 微信发布体验版小程序
  2. 手机打开体验版小程序(正常校验token,没问题)
  3. 关闭小程序进程,再次打开小程序
  4. 此时token校验失败
  5. 再关闭,再打开,没问题
  6. 再关闭,再打开,出问题
  7. 。。。。。。

预期结果:

实际结果:

bug描述:

uni-id的token校验有问题。
我在发布到微信小程序,然后上传了体验版之后。当我在体验版第一次登录之后,校验token 时,发现:

  1. 隔着一次(意思就是关闭体验版小程序,再开启体验版小程序。当然,我指的是手机上的体验版小程序),会报一次token校验失败的错误30201(设备特征码校验错误)
  2. 前提条件:我的所有云函数都需要校验token。
  3. 打开小程序,没问题的时候,所有云函数都可以正常访问。出问题的时候,所有云函数都不能访问,全部报30201错误

    查询日志,发现前后校验的是同一个token

经过多次尝试,确认是隔着一次出问题。比如这次没问题,下次必报错;这次报错下次必没问题。这种神经质问题。

  • 是多设备支持导致的问题吗?
3 天前 负责人:DCloud_UNI_WYQ 分享
已邀请:
linnian

linnian (作者)

我发现开发者工具没问题,就是在真机运行时出现的问题。
才疏学浅,虽然看了你们的源码,但是没看懂。

DCloud_UNI_WYQ

DCloud_UNI_WYQ

30201是为了防止token被拷贝走做的简单ua校验,你是只有体验版有这个问题吗?真机调试或者真机运行有没有问题

  • linnian (作者)

    我就是说真机调试有问题啊,使用另一个微信账户使用小程序也是一样的问题

    1 天前

linnian

linnian (作者)

function getClientUaHash () {
const hash = crypto.createHash('md5')
hash.update(ctx.CLIENTUA)
return hash.digest('hex')
}
上文是源码中获取ua的部分,这个ua应该指的是clientinfo。
下面是我的日志。问题来了,同一部手机,为何会出现,隔着一次报一次错(成功失败成功失败),这样抽风一样的行为。
出问题的日志
请求入参: {
"args": {
"action": "getList",
"params": "{\"finishedAt\":false}",
"clientInfo": {
"PLATFORM": "mp-weixin",
"OS": "android",
"APPID": "UNI91EEE7E",
"CLIENT_SDK_VERSION": "1.0.0"
},
"uniIdToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI1ZjI2NjNjNjFiNWEzMTAwMDE1MWUwZDciLCJjbGllbnRJZCI6IjM5MWU0ODI5MGU0OTI2ZGUyODUxNTVlMzg4YTA2Y2ExIiwiaWF0IjoxNTk2MzU5ODIzLCJleHAiOjE1OTYzNjcwMjN9.AgSZ_WO4MLPu7TaXUHMc4qQouPVsyXT45FAZg-0DHSM"
},
"requestId": "ac140a291596361590389638575"
}
[list/ac140a291596361590389638575/24ms/ERROR] token检验错误 { code: 30201, msg: 'token不合法,请重新登录' }
请求响应状态: success
没问题的日志
请求入参: {
"args": {
"action": "getList",
"params": "{\"finishedAt\":false}",
"clientInfo": {
"PLATFORM": "mp-weixin",
"OS": "android",
"APPID": "UNI91EEE7E",
"CLIENT_SDK_VERSION": "1.0.0"
},
"uniIdToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI1ZjI2NjNjNjFiNWEzMTAwMDE1MWUwZDciLCJjbGllbnRJZCI6IjM5MWU0ODI5MGU0OTI2ZGUyODUxNTVlMzg4YTA2Y2ExIiwiaWF0IjoxNTk2MzU5ODIzLCJleHAiOjE1OTYzNjcwMjN9.AgSZ_WO4MLPu7TaXUHMc4qQouPVsyXT45FAZg-0DHSM"
},
"requestId": "ac1411951596360388141783074"
}
[list/ac1411951596360388141783074/132ms/DEBUG] 开始执行
[list/ac1411951596360388141783074/261ms/DEBUG] 结果 { data: { affectedDocs: 0, data: [] }, code: 0 }
请求响应状态: success

  • DCloud_UNI_WYQ

    可以写一个云函数返回一下context.CLIENTUA看一下,是不是每次ua不一样

    1 天前

  • linnian (作者)

    回复 DCloud_UNI_WYQ: 这是没问题的日志

    [list/ac1411941596438425902768474/23ms/DEBUG] Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.62 XWEB/2574 MMWEBSDK/200601 Mobile Safari/537.36 MMWEBID/2274 MicroMessenger/7.0.16.1700(0x2700103E) Process/appbrand0 WeChat/arm32 NetType/WIFI Language/zh_CN ABI/arm64

    [list/ac1411941596438425902768474/94ms/DEBUG] 开始执行

    [list/ac1411941596438425902768474/211ms/DEBUG] 结果 { data: { affectedDocs: 3, data: [ [Object], [Object], [Object] ] },

    code: 0 }

    1 天前

  • linnian (作者)

    回复 DCloud_UNI_WYQ: 这是出问题的日志

    [list/ac140f2a1596438440758571574/1ms/DEBUG] Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.62 XWEB/2574 MMWEBSDK/200601 Mobile Safari/537.36 MMWEBID/2274 MicroMessenger/7.0.16.1700(0x2700103E) Process/appbrand2 WeChat/arm32 NetType/WIFI Language/zh_CN ABI/arm64

    [list/ac140f2a1596438440758571574/2ms/ERROR] token检验错误 { code: 30201, msg: 'token不合法,请重新登录' }

    1 天前

  • linnian (作者)

    回复 DCloud_UNI_WYQ: 经过在线比较工具,发现了不同:Process/appbrand0 和 Process/appbrand2,位于倒数第二行右边,请问这两个参数代表什么

    1 天前

linnian

linnian (作者)

搜索关键字,猜测是小程序的多进程。这应该是uiid的bug吧

  • DCloud_UNI_WYQ

    我调研一下

    1 天前

  • DCloud_UNI_WYQ

    插件市场uni-id已更新,截断了微信小程序UA里可能会随意变化的部分。另外提供了一个bindTokenToDevice选项用以控制是否将token和设备ua绑定,默认为绑定

    1 天前

  • linnian (作者)

    回复 DCloud_UNI_WYQ: 感谢您的热心回复

    1 天前

要回复问题请先登录注册