在 Laravel 中不处于调试模式时如何阻止某些路由?
How do I block certain routes when not in Debug Mode in Laravel?
有没有办法让 APP_DEBUG
在 Laravel 8 中独占?
我可以在 PreventRequestsDuringMaintenance
中间件异常列表中设置路由。
但这仅适用于维护模式开启时。
我知道如果调试模式打开,我可以简单地在路由上执行 abort(403),但我使用的是 Laravel Web Console 库,它在执行命令时与它自己的路由通信。所以我需要在调试模式下严格阻止对该路由的任何请求。
我想在不处于调试模式时阻止某些路由。 Laravel 有这样的选项吗?还是我需要第三方库?
正如 James 所建议的那样,我修改了中间件并注册了一个全局中间件,以便在任何 uri 与黑名单中的一个匹配时中止 403。
protected $middleware = [
...
// allows blocking some requests when debug mode is off
\App\Http\Middleware\PreventRequestsDuringProduction::class,
];
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
class PreventRequestsDuringProduction
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$blacklist = [
'console',
'laravelwebconsole/execute'
];
$uri = Route::getRoutes()->match($request)->uri;
if(\in_array($uri, $blacklist) && !env('APP_DEBUG')) {
abort(403);
}
return $next($request);
}
}
有没有办法让 APP_DEBUG
在 Laravel 8 中独占?
我可以在 PreventRequestsDuringMaintenance
中间件异常列表中设置路由。
但这仅适用于维护模式开启时。
我知道如果调试模式打开,我可以简单地在路由上执行 abort(403),但我使用的是 Laravel Web Console 库,它在执行命令时与它自己的路由通信。所以我需要在调试模式下严格阻止对该路由的任何请求。
我想在不处于调试模式时阻止某些路由。 Laravel 有这样的选项吗?还是我需要第三方库?
正如 James 所建议的那样,我修改了中间件并注册了一个全局中间件,以便在任何 uri 与黑名单中的一个匹配时中止 403。
protected $middleware = [
...
// allows blocking some requests when debug mode is off
\App\Http\Middleware\PreventRequestsDuringProduction::class,
];
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
class PreventRequestsDuringProduction
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$blacklist = [
'console',
'laravelwebconsole/execute'
];
$uri = Route::getRoutes()->match($request)->uri;
if(\in_array($uri, $blacklist) && !env('APP_DEBUG')) {
abort(403);
}
return $next($request);
}
}