#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"]);
}
}