You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel如何从自定义表生成的JWT令牌中获取已登录用户信息

问题原因

你当前遇到的返回默认user表数据的问题来自两处配置和调用错误:

  1. 自定义认证guard的驱动配置错误,你配置的session驱动是web端会话认证用的,不适用于JWT认证场景
  2. 调用JWTAuth解析token时默认使用全局默认guard(对应users provider),没有指定你自定义的partners_credentials guard

解决步骤

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:06:03