Lumen 中使用 jwt 时多 guard 的问题解决方案

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 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!