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

Laravel生产环境用Scramble生成API文档遇403错误求助

解决Laravel Scramble生产环境403访问错误

排查与修复步骤

1. 确认中间件的替换与加载

你自定义了权限控制中间件,但需确保Scramble已使用该中间件而非默认的RestrictedDocsAccess。打开config/scramble.php,修改middleware配置项为你的自定义中间件类路径:

// config/scramble.php
'middleware' => [
    App\Http\Middleware\YourCustomDocsMiddleware::class, // 替换为实际类路径
],

2. 修正用户认证逻辑

你的自定义中间件通过session()->get('user')获取用户,但API场景通常使用Token认证而非Session,这会导致$user为空触发403。替换为Laravel标准认证方式:

// 替换自定义中间件中的用户获取代码
$user = auth()->user();

3. 优化Gate权限判断逻辑

若保留Gate权限控制,需处理未登录用户的情况,避免依赖注入报错:

Gate::define('viewApiDocs', function (?User $user) {
    if (!$user) {
        return false;
    }
    return in_array($user->email, ['test.test@test.test']);
});

4. 验证生产环境配置

  • 检查.env中的APP_ENV是否为production,确保环境判断逻辑生效
  • 若使用Session认证,确认生产环境会话驱动(如Redis、数据库)配置正常

5. 清除配置缓存

生产环境修改配置或中间件后,必须执行缓存清理:

php artisan config:clear
php artisan cache:clear

最终可用的自定义中间件示例

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class RestrictedDocsAccess
{
    public function handle($request, Closure $next)
    {
        if (app()->environment('local')) {
            return $next($request);
        }

        $user = Auth::user();
        if (!$user) {
            return redirect('login'); // 纯API场景可返回401 JSON响应
        }
        
        if (in_array($user->email, ["test.test@test.test"])) {
            return $next($request);
        }

        abort(403);
    }
}

更新配置并清除缓存后,重新访问生产环境文档页面即可正常显示。

内容的提问来源于stack exchange,提问作者landry moutongo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:22:46