Laravel Passport OAuth 数据库查询改缓存优化
1、oauth_clients 表查询缓存修改
-- 找到路径 project/vendor/laravel/passport/src/Client.php 文件
注释该行代码,不然查询出来存缓存无法获取 secret 值
-- 找到路径 project/vendor/laravel/passport/src/ClientRepository.php 文件,修改 find() 方法,将第一次查询结果存入缓存,后校验 client_id 及 client_secret 直接查询缓存。
<注意:如果经常修改 client_secret ,请记得修改此文件中的 update() 方法,修改完成后删除指定缓存数据>
2、oauth_access_tokens 表插入查询优化
-- 找到路径为 project/vendor/laravel/passport/src/TokenRepository.php 文件,修改 create() 方法,将写入数据库的数据存入 token_id=>attributes 的键值对缓存,将 attributes 数据写入 redis 队列(通过任定时任务异步写入数据库);修改 find() 方法,直接通过 token_id 查询缓存是否存在(这里的缓存过期时间可以直接设置为 token 的有效期时间,就不需要查询数据库了)
3、oauth_refresh_tokens 表操作优化
-- 找到路径为 project/vendor/laravel/passport/src/Bridge/RefreshTokenRepository.php 文件,修改 persistNewRefreshToken() 方法,将直接插入 oauth_refresh_tokens 表的数据写入 redis 队列,后台定时任务异步入库(因 refresh_token 有效期设置一般较长及使用频率不高,故查询 refresh_token 未做缓存优化,如果需要也只是多存一组 String 类型的缓存数据,修改persistNewRefreshToken() 方法存key=>value 缓存,修改 isRefreshTokenRevoked() 方法查询缓存即可)
4、token校验优化
--另外还可以修改文件
project/vendor/league/oauth2-server/src/AuthorizationValidators/BearerTokenValidator.php 中的 validateAuthorization() 方法,直接查询对应 token_id 的缓存是否存在来校验 token 的有效性
5、异步写库
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: