Laravel Passport OAuth 資料庫查詢改快取最佳化

Explorer發表於2019-09-21

1、oauth_clients 表查詢快取修改

-- 找到路徑 project/vendor/laravel/passport/src/Client.php 檔案
註釋該行程式碼,不然查詢出來存快取無法獲取 secret 值

Laravel Passport Oauth 資料庫查詢改快取最佳化

-- 找到路徑 project/vendor/laravel/passport/src/ClientRepository.php 檔案,修改 find() 方法,將第一次查詢結果存入快取,後校驗 client_id 及 client_secret 直接查詢快取。
<注意:如果經常修改 client_secret ,請記得修改此檔案中的 update() 方法,修改完成後刪除指定快取資料>

Laravel Passport Oauth 資料庫查詢改快取最佳化

2、oauth_access_tokens 表插入查詢最佳化

-- 找到路徑為 project/vendor/laravel/passport/src/TokenRepository.php 檔案,修改 create() 方法,將寫入資料庫的資料存入 token_id=>attributes 的鍵值對快取,將 attributes 資料寫入 redis 佇列(透過任定時任務非同步寫入資料庫);修改 find() 方法,直接透過 token_id 查詢快取是否存在(這裡的快取過期時間可以直接設定為 token 的有效期時間,就不需要查詢資料庫了)

Laravel Passport Oauth 資料庫查詢改快取最佳化

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() 方法查詢快取即可)

Laravel Passport Oauth 資料庫查詢改快取最佳化

4、token校驗最佳化

--另外還可以修改檔案
project/vendor/league/oauth2-server/src/AuthorizationValidators/BearerTokenValidator.php 中的 validateAuthorization() 方法,直接查詢對應 token_id 的快取是否存在來校驗 token 的有效性

Laravel Passport Oauth 資料庫查詢改快取最佳化

Laravel Passport Oauth 資料庫查詢改快取最佳化

5、非同步寫庫

Laravel Passport OAuth 資料庫查詢改快取最佳化

Laravel Passport OAuth 資料庫查詢改快取最佳化

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章