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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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