Laravel 5.7:在哪里可以注册允许的GET参数并阻止其他参数?

时间:2018-10-18 05:42:20

标签: laravel laravel-5.7

我有一个简单的Laravel应用程序,并且为我的应用程序自定义了允许的GET参数:

$allowedGetParameters = [
  'user',
  'event',
  'action'
]

如何阻止除数组中指定参数之外的所有其他GET参数?

例如可能的URL地址:

 - https://app.com/?user=16
 - https://app.com/?event=242&user=16
 - https://app.com/?user=16&event=242&action=like

带有其他GET参数的URL必须返回响应404。以下示例URL:

 - https://app.com/?user=16&post=43&like=true
 - https://app.com/?guru=242&set=superguru&action=true

注意:

在这种情况下,如果网址包含一个或多个不允许的GET参数 带有或不带有允许的GET参数 ,则结果也应返回404。

1 个答案:

答案 0 :(得分:1)

创建中间件https://laravel.com/docs/5.7/middleware

实施handle方法,在此进行检查:

$params = array_keys($request->all());
$is_valid_params = count(array_diff($params, $allowedGetParameters)) == 0;
$is_get_request = $request->method() == 'GET';
if ($is_valid_params && $is_get_request) {
    return $next($request);
};
return abort(404);

我也将$ allowedGetParameters移到somefile.php中的config文件夹中,并像这样访问:count(array_diff($params, config('somefile.allowedGetParameters')) == 0;

别忘了:

1)在protected $routeMiddleware的app \ Http \ Kernel.php中注册中间件。

2)使用以下方法将您的路由包装在web.php中:

Route::group(['middleware' => ['name_of_your_widdleware']], function () {