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 协议》,转载必须注明作者和本文链接