предоставьте только аутентифицированному пользователю возможность получать свои собственные данные с помощью Laravel API и Sanctum

#laravel #api #authentication #laravel-sanctum

Вопрос:

у меня есть эта функция для получения заказов только для аутентифицированного пользователя:

 function show($uid) {
        try {
            $user = User::findOrFail($uid);
            $orders = $user->orders;
            return $orders;
        }catch (Exception $e) {
            return response()->json(['messsage' => "cannot show order for this user"]);
        }
    }
 

это конечная точка для API на этом маршруте:

 Route::group(['middleware' => ['auth:sanctum']], function () {
    Route::get('/order/{id}', [OrdersController::class, 'show']);
});
 

но теперь, если кто-нибудь просто добавит любой uid, он сможет отобразить все заказы…
мой вопрос в том, как я могу защитить эту функцию, чтобы только пользователь auth мог получать данные: и я использовал Sanctum в своем проекте

в laravel с blade я просто делаю вот так:

 function show() {
           $uid = auth()->id();
            try {
                $user = User::findOrFail($uid);
                $orders = $user->orders;
                return $orders;
            }catch (Exception $e) {
                return response()->json(['messsage' => "cannot show order for this user"]);
            }
    }
 

Ответ №1:

Спасибо вам всем…… Я нашел решение, я мог бы просто найти идентификатор аутентифицированного пользователя, так как я использую охрану (святилище).:

 auth('sanctum')->user()->id
 

это даст мне идентификатор пользователя аутентификации в зависимости от токена.
и решение будет таким:

  function show(Request $request) {
        try {
            $uid = auth('sanctum')->user()->id;
            $user = User::findOrFail($uid);
            $orders = $user->orders;
            return $orders;
        }catch (Exception $e) {
            return response()->json(['messsage' => "cannot show order for this user"]);
        }
    }