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

如何在Laravel的Swagger中移除Bearer前缀?

Laravel移除Swagger中JWT的Bearer前缀要求方案

你在Controller里加的Swagger注解只是定义了安全方案,但实际请求时Laravel的JWT认证逻辑还是强制要求Bearer前缀,得从Swagger配置和Laravel认证逻辑两方面修改:

1. 调整Swagger安全方案注解

把原来的http类型改成apiKey类型,这样Swagger的授权输入框不会自动给你加Bearer前缀,直接把输入的token放到请求头里:

@OA\SecurityScheme(
    type="apiKey",
    in="header",
    name="Authorization",
    securityScheme="bearerAuth"
)

2. 修改Laravel的JWT认证逻辑

默认情况下tymon/jwt-auth这类JWT包会校验Authorization头的Bearer前缀,两种修改方式选一种就行:

方式一:修改认证中间件

找到app/Http/Middleware/Authenticate.php(或者你自定义的JWT认证中间件),调整token获取逻辑,自动兼容有无前缀的情况:

public function handle($request, Closure $next, ...$guards)
{
    $token = $request->header('Authorization');
    
    // 有前缀就去掉,没有直接用
    if (str_starts_with($token, 'Bearer ')) {
        $token = substr($token, 7);
    }

    try {
        $user = JWTAuth::parseToken($token)->authenticate();
    } catch (\Exception $e) {
        return response()->json(['error' => '未授权'], 401);
    }

    return $next($request);
}

方式二:修改JWT配置文件

打开config/jwt.php,找到token_prefix选项,把值改成空字符串:

'token_prefix' => '',

这样JWT包会直接读取token内容,不再校验前缀。

3. 刷新Swagger文档

修改完注解后,执行生成命令更新文档:

php artisan l5-swagger:generate

之后在Swagger里直接输入纯token就能正常授权了。

内容的提问来源于stack exchange,提问作者gaurav bhatia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:07:20