Lumen 中使用 jwt 時多 guard 的問題解決方案

Mortence發表於2019-11-05

Lumen 中使用 jwt 時,如存在多個 guard,在中介軟體中指定 guard 後,在其他地方解析 jwt 中攜帶的資訊時,會發現並沒有使用中介軟體中指定的 guard。在 Laravel 中可以直接獲取中介軟體指定的 guard。針對這個問題,沒有深入研究造成這種現象的具體原因,我採用了一種間接的方法來實現。
檢視 Lumen 原始碼在 vendor/illuminate/auth/AuthManager.php 檔案 guard 方法中發現使用了預設的 driver,所以思路就是臨時改變 Default Driver

  • auth.php 中定義 guard,如定義了 A、B 兩個
  • app/Http/Middleware/Authenticate.php 的 handle 方法中 guard 引數接收了 auth 中介軟體傳過來的 guard 引數,所以處理思路就是在路由中使用 auth:A 把 A 傳入到 handle 方法。然後在 handle 方法中新增 config(['auth.defaults.guard'=> $guard]) 臨時修改 Default Driver
  • 在需要使用 jwt 的地方使用 app('auth')->guard() 來解析 jwt
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章