[英]Showing only current authenticated user orders in laravel 5.8
我正在為android開發人員創建一個API,以顯示用戶的訂單。我的代碼使任何用戶都可以顯示任何產品,我想要的只是顯示經過身份驗證的用戶的訂單
我已經保護了這樣的路線:
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”並且經過身份驗證的用戶未創建該訂單時,它仍然會返回成功且空數據。
我想要的就是“選擇訂單號(#),但要確保已登錄的用戶創建的訂單不是別人創建的,如果沒有返回未經身份驗證的話”
先感謝您。
QueryBuilder::get()
方法返回一個集合,一個空集合仍然是一個集合對象,因此$Orders
永遠不會為null或為空。
嘗試:
if (!$Orders->count()) {
return $this->sendError('Orders not found.');
}
如果您基於令牌對用戶進行身份驗證,則必須通過以下方式獲取經過身份驗證的用戶ID:
$user = Auth::guard('api')->id();
並按照@kiske所說更改if
語句。
嘗試
if($Orders->isEmpty()){
return $this->sendError('Orders not found.');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.