关于获取登录用户的问题?

当添加middleware api.auth 或者在auth('web')->user()前调用$this->user() $this->auth等:
auth('api')->user() auth('web')->user() 均能获取用户 且为相同用户
当不添加middleware api.auth或不进行上述调用时:
auth('api')->user()可以获取用户 auth('web')->user()不能获取用户
个人认为调用API时应该能获取auth('api')->user()不能获取auth('web')->user()才是正确的情况
在查看源码寻找原因时发现:
file
file
file
此处AuthTymon\JWTAuth\Providers\Auth\Illuminate
file
嵌套调用发现先最终Auth是用的laravelSessionGuard但是还没没找到覆写不同guard的登录用户代码

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5
liyu001989
  1. 使用 postman 测试 并不能通过 auth('web')->user() 得到用户,你是浏览器测试?
  2. 并不是使用 SessionGuard 使用的是 vendor/tymon/jwt-auth/src/JwtGuard.php。再仔细阅读一下源码,你可以看看这里的回答 问答:Auth::guard ('API')->attempt ($credentials)) 到底是什么?
5年前 评论

@liyu001989

代码示例

加载鉴权中间件 middleware => api.auth情况

file
file

不加载鉴权中间件 middleware => api.auth 请求时无头部鉴权信息Authorization

file

file

不加载鉴权中间件 middleware => api.auth 请求时携带头部鉴权信息Authorization

file
file

----------分割线------------

file

file

--------------分割线--------------

file

file

调用$this->user``$this->auth会和采用中间件api.authauth('web')的结果起用一样的影响

5年前 评论

@liyu001989

重新查看了整个api.auth中间件调用流程发现了问题所在

file

file

file

file

file

file

file

file

5年前 评论

当使用中间件auth:api

file

file

不使用中间件auth:api

file

file

5年前 评论
liyu001989

明白你的意思了,给你点个赞先。

中间件调用 authenticate,最终使用了 sessionGuard setUser。

因为 auth 使用了配置中指定的 Tymon\JWTAuth\Providers\Auth\Illuminate,其中注入的是默认的是 Illuminate\Contracts\Auth\Guard。可能修改这里会达到你的预期。

file

file

不过为什么要纠结这里,你有什么特殊的业务逻辑吗

5年前 评论

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