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

如何让JWTAuth支持不同用户类型?业务用户登录需切换至BusinessUser表

解决方法:让authBU方法从BusinessUser表获取数据

嘿,我来帮你搞定这个需求!既然你已经在auth.php里配置了business_users守卫,咱们只需要对现有代码做几个关键调整,就能让认证逻辑指向BusinessUser表了:

1. 指定使用business_users守卫进行认证

原来的JWTAuth::authenticate()默认会使用默认守卫(通常是web或api),而你需要明确指定用business_users守卫来处理,这样它就会关联到你配置的BusinessUser模型了。修改这一行代码:

// 替换之前的认证代码
$user = JWTAuth::guard('business_users')->authenticate(request('token'));

2. 确认auth.php的守卫配置正确

虽然你说已经配置了守卫,但还是再确认一下providers部分是否正确指向了BusinessUser模型,避免踩坑:

// config/auth.php
'guards' => [
    'business_users' => [
        'driver' => 'jwt', // 确保驱动是你使用的JWT驱动
        'provider' => 'business_users',
    ],
    // 其他守卫配置...
],

'providers' => [
    'business_users' => [
        'driver' => 'eloquent',
        'model' => App\Models\BusinessUser::class, // 这里必须是你的BusinessUser模型正确路径
    ],
    // 其他provider配置...
],

3. 适配Transformer(可选)

如果原来的UserLoginTransformer是专门为User模型设计的,字段和BusinessUser不匹配,那你需要新建一个BusinessUserLoginTransformer来适配业务用户的字段,然后替换返回里的Transformer:

return $this->buildItemResponse($user, new BusinessUserLoginTransformer());

如果两个模型的字段结构完全一致,这一步可以直接跳过。

修改后的完整代码

// 认证业务用户
public function authBU()
{
    $this->validate(request(), [
        'provider' => 'required',
        'token' => 'required',
    ]);

    // 使用business_users守卫进行JWT认证
    $user = JWTAuth::guard('business_users')->authenticate(request('token'));

    // 根据实际情况选择对应的Transformer
    return $this->buildItemResponse($user, new UserLoginTransformer());
}

小提示

要确保用来认证的token是通过business_users守卫生成的哦!不同守卫生成的JWT token是不互通的,如果用错了token会直接导致认证失败。

内容的提问来源于stack exchange,提问作者Seio. E.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:14:58