解决 Laravel JWT 多表认证时获取不到当前认证用户的问题
解决 Laravel JWT 多表认证时获取不到当前认证用户的问题
由 4Ark 创建于1年前, 最后更新于 1年前 版本号 #1 2987 views 1 likes
问题描述
最近在做一个项目,需要多表认证,分别为admin
和user
表,我采用的JWT
认证方式,但今天遇到了一个问题:使用Auth::user()
返回null
,也就是说无法获得当前认证的用户。
网上搜索后,并没有找到直接的解决方案,然后经过几次尝试居然误打误撞地解决了,所以特地记录下来,希望遇到同样问题的人不要再在这问题上耗费太多时间。
注意:这里并不介绍JWT
的工作原理和配置,如果想理解更多请参考以下文章:
大致配置
先讲一下我的配置。
auth.php
文件如下:
return [
'defaults' => [
'guard' => env('AUTH_GUARD', 'admin'),
],
'guards' => [
'admin' => [
'driver' => 'jwt', #### 更改为JWT驱动
'provider' => 'admins',
],
'user' => [
'driver' => 'jwt', #### 更改为JWT驱动
'provider' => 'users',
],
],
'providers' => [
'admins' => [
'driver' => 'eloquent',
'model' => \App\Admin::class, #### 指定用于token验证的模型类
],
'users' => [
'driver' => 'eloquent',
'model' => \App\User::class, #### 指定用于token验证的模型类
],
],
'passwords' => [
//
],
];
问题的根源
在auth.php
中,我们有两个guard
,而默认的guard
指向的是admin
,这时候如果是user
经过的验证的话,是无法通过Auth::user()
获取到当前认证用户信息的。
解决方法
解决方法很简单,只要使用Auth::guard('user')
指明使用哪个guard
即可,这里我是通过公用的控制器中的一个方法:
public function getAuthUser($guard = 'admin'){
return Auth::guard($guard)->user();
}
感谢观看!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2018-04-27 crontab 详细用法 定时任务