如何通过 Laravel 中的中间件使用 API 授权用户拥有资源?
How to authorize user owns resource using API through middleware in Laravel?
我需要检查是否允许用户查看资源。请求由 API 发送并通过 auth:api
中间件。我正在使用 Laravel 5.8
我试过像这样在路由声明中使用中间件:
Route::get('/user/{id}', 'UserController@get')->middleware('can:view,user')
或者在方法的控制器代码中这样:
$user = Auth::guard('api')->user();
$this->authorize('view', $user, $anotherUserModel);
这些方法中的每一个要么让用户通过策略,即使它被硬编码以阻止用户表单实现此目的,要么抛出错误:
{
"message": "This action is unauthorized.",
"exception": "Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException",
"file": "C:\xampp\htdocs\laravelapitest\vendor\laravel\framework\src\Illuminate\Foundation\Exceptions\Handler.php",
"line": 202,
[...]
}
但我希望用户应该停止并且响应代码应该是 403
你能试一试吗,如果它能解决你的问题,请告诉我。
转到 App\Exceptions 文件夹并在 Handler.php 文件的顶部添加以下内容:
use Illuminate\Auth\Access\AuthorizationException;
将以下内容添加到同一文件中的 $dontReport 数组中:
\Illuminate\Auth\Access\AuthorizationException::class,
最后一步是通过在渲染函数中添加以下代码来自定义错误响应:
if ($exception instanceof AuthorizationException) {
return response()->json('unauthorized',403);
}
我需要检查是否允许用户查看资源。请求由 API 发送并通过 auth:api
中间件。我正在使用 Laravel 5.8
我试过像这样在路由声明中使用中间件:
Route::get('/user/{id}', 'UserController@get')->middleware('can:view,user')
或者在方法的控制器代码中这样:
$user = Auth::guard('api')->user();
$this->authorize('view', $user, $anotherUserModel);
这些方法中的每一个要么让用户通过策略,即使它被硬编码以阻止用户表单实现此目的,要么抛出错误:
{
"message": "This action is unauthorized.",
"exception": "Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException",
"file": "C:\xampp\htdocs\laravelapitest\vendor\laravel\framework\src\Illuminate\Foundation\Exceptions\Handler.php",
"line": 202,
[...]
}
但我希望用户应该停止并且响应代码应该是 403
你能试一试吗,如果它能解决你的问题,请告诉我。
转到 App\Exceptions 文件夹并在 Handler.php 文件的顶部添加以下内容:
use Illuminate\Auth\Access\AuthorizationException;
将以下内容添加到同一文件中的 $dontReport 数组中:
\Illuminate\Auth\Access\AuthorizationException::class,
最后一步是通过在渲染函数中添加以下代码来自定义错误响应:
if ($exception instanceof AuthorizationException) {
return response()->json('unauthorized',403);
}