Laravel如何从自定义表生成的JWT令牌中获取已登录用户信息
问题原因
你当前遇到的返回默认user表数据的问题来自两处配置和调用错误:
- 自定义认证guard的驱动配置错误,你配置的
session驱动是web端会话认证用的,不适用于JWT认证场景 - 调用JWTAuth解析token时默认使用全局默认guard(对应
usersprovider),没有指定你自定义的partners_credentialsguard
解决步骤
1. 修正guard配置
修改config/auth.php里的guards配置,将自定义guard的驱动改为jwt:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'partners_credentials' => [ 'driver' => 'jwt', // 此处改为jwt驱动 'provider' => 'partners_credentials', 'hash' => false, ], ],
2. 确保生成令牌时使用自定义guard
你登录生成token的代码需要指定对应guard,示例:
// 不要用默认的auth()->attempt($credentials) $token = auth('partners_credentials')->attempt($loginCredentials);
3. 解析token时指定自定义guard
不需要手动取Authorization头,直接通过指定guard获取用户即可,两种写法可选:
// 写法1:通过auth门面直接获取(推荐,自动处理token校验) $user = auth('partners_credentials')->user(); // 写法2:用JWTAuth facade指定guard解析 $token = $request->header('Authorization'); $user = JWTAuth::guard('partners_credentials')->toUser($token);
补充校验项
确认你的App\Models\PartnerCredentials模型已经实现JWTSubject接口:
use Tymon\JWTAuth\Contracts\JWTSubject; class PartnerCredentials extends Model implements JWTSubject { // 实现两个必须的方法 public function getJWTIdentifier() { return $this->getKey(); } public function getJWTCustomClaims() { return []; } }
内容的提问来源于stack exchange,提问作者Mr Alb
相关产品推荐
相关产品推荐

