Open lhhxxxxx opened 4 days ago
此前遇到了一个bug:当uid被其他人抢先绑定之后,即使对方取消绑定,无论如何操作,排行榜等处显示的头像仍然会显示对方的头像。
经过分析,该bug问题在于redis数据库miao:rank:uid-info:{uid}内存储的qq号不刷新,而更新该处数据库的方法为setUidInfo。该方法只在两处被调用,其一:
miao:rank:uid-info:{uid}
setUidInfo
并不会实际更新数据库,其二来自本pr修改的render函数,其首先定义了isSelfUid:
render
isSelfUid
然后传入setUidInfo:
内部更新qq号逻辑如下:
因此,qq号当前仅当当前uid在getCkUidList返回的uid列表中时会被更新。虽然getCkUidList函数名已经暗示了其用途,但鉴于是第一次接触本项目代码,确认了一下其逻辑:
getCkUidList
因此显然,getCkUidList只会返回绑定了cookie的uid。
综上,bug的原因在于,只要没有绑定过cookie,只要被人绑定过的uid,其uid-qq对应关系就不再会发生改变,故做出此修改及pr。
此外,本修改不会影响系统健壮性与安全性,毕竟初始的uid-qq对应关系本就是无权鉴的,且本修改涉及的变量均只影响setUidInfo函数的uidType参数,该参数只涉及对应qq号的更新逻辑。
uidType
此前遇到了一个bug:当uid被其他人抢先绑定之后,即使对方取消绑定,无论如何操作,排行榜等处显示的头像仍然会显示对方的头像。
经过分析,该bug问题在于redis数据库
miao:rank:uid-info:{uid}
内存储的qq号不刷新,而更新该处数据库的方法为setUidInfo
。该方法只在两处被调用,其一:并不会实际更新数据库,其二来自本pr修改的
render
函数,其首先定义了isSelfUid
:然后传入
setUidInfo
:内部更新qq号逻辑如下:
因此,qq号当前仅当当前uid在
getCkUidList
返回的uid列表中时会被更新。虽然getCkUidList
函数名已经暗示了其用途,但鉴于是第一次接触本项目代码,确认了一下其逻辑:因此显然,
getCkUidList
只会返回绑定了cookie的uid。综上,bug的原因在于,只要没有绑定过cookie,只要被人绑定过的uid,其uid-qq对应关系就不再会发生改变,故做出此修改及pr。
此外,本修改不会影响系统健壮性与安全性,毕竟初始的uid-qq对应关系本就是无权鉴的,且本修改涉及的变量均只影响
setUidInfo
函数的uidType
参数,该参数只涉及对应qq号的更新逻辑。