Я создаю API для разработчика Android, чтобы иметь возможность показывать заказы, сделанные пользователем. Мой код заставляет любого пользователя показывать любой продукт, я хочу показывать только заказы, сделанные аутентифицированным пользователем
Я защитил маршрут следующим образом:
Route::middleware('auth:api')->group( function () {
Route::resource('orders', 'API\OrdersController');
});
и я использую следующие заголовки в запросе:
'headers' => [ 'Accept' => 'application/json', 'Authorization' => 'Bearer '.$accessToken,]
вот код контроллера метода show($id)
public function show($id)
{
$user = Auth::id();
$Orders = Orders::where('id',$id)->where('order_shopper_id', $user)->get();
if (is_null($Orders) || empty($Orders)) {
return $this->sendError('Orders not found.');
}
return $this->sendResponse($Orders->toArray(), 'Orders retrieved successfully.');
}
это работает, но когда, например, я пытаюсь получить доступ к заказу номер «2», а аутентифицированный пользователь не создал этот заказ, он все равно возвращает успех с пустыми данными.
Все, что я хочу, это: «Выберите номер заказа (#), но убедитесь, что вошедший в систему пользователь создал этот заказ, а не кто-то другой, если он не вернется без аутентификации».
Заранее спасибо.
Он возвращает текущий идентификатор пользователя, прошедшего проверку подлинности.
Просто используйте это if ($Orders)
, это сработает.
Он ВОЗВРАЩАЕТСЯ или вы ожидаете, что он вернет идентификатор пользователя? Потому что я думаю, что вы должны использовать защиту API.
Я протестировал его с помощью Postman, и пока я использую токен, он возвращает идентификатор, и я использую защиту API. Я посмотрю его, хотя, чтобы увидеть, следует ли мне его использовать.
Метод QueryBuilder::get()
возвращает коллекцию, пустая коллекция по-прежнему является объектом коллекции, поэтому $Orders
никогда не будет нулевым или пустым.
Пытаться:
if (!$Orders->count()) {
return $this->sendError('Orders not found.');
}
Это было не совсем то, что я ищу, но это сработало
пытаться
if ($Orders->isEmpty()){
return $this->sendError('Orders not found.');
}
Если вы аутентифицируете пользователя на основе токена, вы должны получить идентификатор аутентифицированного пользователя следующим образом:
$user = Auth::guard('api')->id();
И измените утверждение if
, как сказал @kiske.
Я аутентифицирую пользователей на основе токенов, и я не использую этот способ, и он все еще работает, но в любом случае я посмотрю.
Что в
$user
? Вы можете проверить это? верните его и посмотрите, пустой он или нет.