关于获取登录用户的问题?
当添加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()
才是正确的情况
在查看源码寻找原因时发现:
此处Auth
是Tymon\JWTAuth\Providers\Auth\Illuminate
嵌套调用发现先最终Auth
是用的laravel
的SessionGuard
但是还没没找到覆写不同guard
的登录用户代码
@liyu001989
代码示例
加载鉴权中间件
middleware => api.auth
情况不加载鉴权中间件
middleware => api.auth
请求时无头部鉴权信息Authorization
不加载鉴权中间件
middleware => api.auth
请求时携带头部鉴权信息Authorization
----------分割线------------
--------------分割线--------------
@liyu001989
明白你的意思了,给你点个赞先。
中间件调用 authenticate,最终使用了 sessionGuard setUser。
因为 auth 使用了配置中指定的
Tymon\JWTAuth\Providers\Auth\Illuminate
,其中注入的是默认的是Illuminate\Contracts\Auth\Guard
。可能修改这里会达到你的预期。不过为什么要纠结这里,你有什么特殊的业务逻辑吗