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

Laravel 10 JWT API部署CentOS后部分角色路由返回401未授权

问题排查与解决方案

1. 检查ClientAuthenticationController的userInfo方法实现

  • 确认方法中是否指定了正确的guard:
    // 明确指定client guard,避免使用默认guard导致查询错误
    public function userInfo()
    {
        return response()->json(auth('client')->user());
    }
    
    若直接使用auth()->user(),而默认guard并非client,会无法获取到client用户,返回401。
  • 排查方法内是否有额外权限校验(如账号活跃状态),比如服务器上的client账号是否被标记为非活跃,而本地测试账号是正常状态。

2. 验证jwt.verify中间件逻辑

确保自定义的jwt.verify中间件正确根据传入的guard参数切换认证guard:

public function handle($request, Closure $next, $guard)
{
    // 切换到指定的guard,保证后续auth()操作使用正确的用户模型
    auth()->shouldUse($guard);
    
    try {
        if (!auth()->user()) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }
    } catch (\Exception $e) {
        return response()->json(['error' => 'Unauthorized'], 401);
    }
    
    return $next($request);
}

若中间件未执行shouldUse切换guard,即使token有效,auth()->user()也会用默认guard查询,导致找不到client用户。

3. 检查config/auth.php的guard配置

确认client guard和provider的配置正确:

'guards' => [
    // ...其他guard配置
    'client' => [
        'driver' => 'jwt',
        'provider' => 'clients',
    ],
    'student' => [
        'driver' => 'jwt',
        'provider' => 'students',
    ],
],

'providers' => [
    // ...其他provider配置
    'clients' => [
        'driver' => 'eloquent',
        'model' => App\Models\Client::class,
    ],
    'students' => [
        'driver' => 'eloquent',
        'model' => App\Models\Student::class,
    ],
],

同时清理服务器上的配置缓存,执行以下命令:

php artisan config:clear
php artisan route:clear
php artisan cache:clear

4. 确认Client模型实现JWTSubject接口

确保Client模型正确实现JWT要求的接口:

use Illuminate\Database\Eloquent\Model;
use Tymon\JWTAuth\Contracts\JWTSubject;

class Client extends Model implements JWTSubject
{
    // ...模型其他代码

    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    public function getJWTCustomClaims()
    {
        return [];
    }
}

未实现该接口会导致JWT无法正确解析出client用户。

5. 验证JWT Token的Payload

使用jwt.io解析client的token,检查:

  • sub字段是否对应服务器数据库中存在的client ID;
  • 本地与服务器的JWT_SECRET是否一致(查看.env文件),不一致会导致用户解析失败;
  • aud、iss等声明是否与服务器配置匹配。

内容的提问来源于stack exchange,提问作者Ashiq Fardus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 19:53:18