这样就再登陆就会抛出:incorrect result size:expected 1,actual 2。
当时的环境只有一个APP USER在连接。是内部测试。
这个BUG很严重。
version:0.4-beta
能提供具体的重显步骤吗?还有试试0.5版本呢
问题重现
步骤一 使用 password 类型登录
步骤二 刷新 refresh_token token ;
步骤三 再次使用步骤一登录; 此时数据库产生两条记录,此步骤可以重复
嗯, 尽快检查修复
我看了下创建token的源码,这里在并发的情况下本身就有问题
看代码很容易看懂, 但问题时如何复现, 高并发时,就有一个账号同时操作./这也不一定
这类问题在于 用同一个 client 同时去请求多次 access_token ; 第一个请求还没处理完,第二个相同请求已经到达 服务器,去查询 第一个请求的 AccessToken没查找 到就会出现这类情况;
这 在实际 使用中不适合,一个 client的同一用户 同时只能去请求一次即解决问题(不能一client并发去请求access_token);并且对获取 的 access_token 进行缓存(当要当期前再去请求新 access_token 或 调用 refresh token API)
@feng_codes sync 肯定 是不推荐的;只需要一个client的用户不并发请求就没这问题。
我会去检查 下新版本中修复这问题没。如果解决了会升级下版本。
在数据库中通过增加SQL字段 的唯一性来解决高并发下问题,SQL
ALTER TABLE oauth_access_token ADD UNIQUE INDEX authentication_id_unique_index(authentication_id);
另外在高并发场景下,推荐将 access_token 存入redis, 可参考文章:
http://andaily.com/blog/?p=19776
Sign in to comment