首页 > 解决方案 > Laravel 中间件授权问题

问题描述

我想简要描述一下我到目前为止所做的事情以及问题到底是什么,希望你能帮助我。

我有一个以 Angular 作为前端的 Laravel 8 后端。在我的应用程序中,我发送了一个 API,以便用户可以查询他自己的数据并对其进行修改,例如他的姓名和电子邮件。

例如,我的想法是有一条路线.../user/1,我在其中传递当前登录用户的 ID。但这里的问题是:如果我重新输入12就像.../user/2 我可以访问其他用户的个人资料并可以修改和删除他的数据一样。这将是一个大问题,我想尝试使用中间件来不允许未经授权访问其他配置文件。

所以我在我的api.php中尝试了:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

// Get Specific User
Route::get('user/{id}' ,'App\Http\Controllers\UserController@getUserById')->middleware(['auth', 'ResourceOwner']);

获取特定用户的 ID。为此,我创建了一个中间件ResourceOwner并在其中具有以下功能:

class ResourceOwner
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->id !== auth('api')->user->id) {
            abort(403);
        }

        return $next($request);
    }

并在受保护的 $routeMiddleware的Kernel.php 中对其进行初始化,如下所示:'ResourceOwner' => \App\Http\Middleware\ResourceOwner::class,

现在真正的问题是:我现在根本无法访问数据,无论是否登录。不幸的是,我收到错误 401(未经授权)。我使用Tymon/jwt-auth 包。.

你们有什么想法我在这里错过或做错了吗?我会很高兴得到答案并非常感谢。

标签: angularlaravelauthenticationjwtbackend

解决方案


推荐阅读