Laravel 中间件没有按预期工作

Laravel middleware doesn't work as expected

我使用 Laravel 8 作为后端,Angular 11 作为前端。在使用 url 购买后,我想通过前端的 API 将三个参数传递给 Laravel。这看起来像这样:.../{user_id}/${track_id}/${price_id}。 我不知道这是否是确认购买的最佳方式,但不幸的是,即使经过大量研究,我也不知道任何其他方式。唯一的问题是它非常脆弱,可以用例如任何数字写入任何数字。邮递员,所以产品最终会进入他们的帐户。

现在我在 api.php 中尝试了:

Route::post('addTrackusers/{user_id}/{track_id}/{track_pice}', 'App\Http\Controllers\trackusersController@addTrackusers')->middleware(['auth:api', Payout::class]);

在这条路线的帮助下,我获得了所需的三个参数。然而,在那之后,我想使用中间件来防止未经授权的用户传递任何没有购买任何东西的参数:

Middleware/Payout.php

    public function handle($request, Closure $next)
    {
        $user = auth()->user();
        if ($request->id != $user->id) {
            abort(403, 'Unauthorized action');
        } else {
            return $next($request);
        }
    }

我真的不知道如何解决这个问题。我的想法是传递三个参数,比较是否属于当前用户。

而且当前用户也可以只在Postman中输入他的token,然后他将被授权传递三个参数。我真的很感激任何建议或如何最好地解决这个问题。

非常感谢!

这应该有效:

public function handle($request, Closure $next)
    {

        if ($request->user_id !== auth()->user()->id) {
            abort(403, 'Unauthorized action');
        }
        
        return $next($request); 
    }

在你的url中,你没有$id,但是$user_id