簡體   English   中英

在laravel 5.8中僅顯示當前經過身份驗證的用戶訂單

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM