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
相关产品推荐
相关产品推荐

