我正在为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”并且经过身份验证的用户未创建该订单时,它仍然会返回成功且空数据。
我要的是,“选择订单号(#),但要确保登录的用户创建的订单不是别人创建的,如果没有返回未经身份验证的话”
谢谢。
答案 0 :(得分:2)
QueryBuilder::get()
方法返回一个集合,一个空集合仍然是一个集合对象,因此$Orders
永远不会为null或为空。
尝试:
if (!$Orders->count()) {
return $this->sendError('Orders not found.');
}
答案 1 :(得分:1)
如果您基于令牌对用户进行身份验证,则必须通过以下方式获取经过身份验证的用户ID:
$user = Auth::guard('api')->id();
然后像@kiske所说的那样更改if
语句。
答案 2 :(得分:0)
尝试
if($Orders->isEmpty()){
return $this->sendError('Orders not found.');
}