You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.7中如何限制API仅返回当前登录用户的对应信息?

解决方案

核心思路

你已经接入了auth:api中间件完成身份校验,当前登录用户的ID可以直接从请求上下文中获取,完全不需要通过URL传参,从根源上避免参数篡改风险。

步骤1:调整路由配置

修改api.php中的路由定义,去掉URL中的user_id参数:

<?php

use Illuminate\Http\Request;

Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout');

Route::group(['middleware' => 'auth:api'], function() {
    Route::get('/user', function (Request $request) {
        return $request->user();
    });
    // 移除user_id路由参数
    Route::get('/getOrder','OrderController@indexByUser');
});

步骤2:修改OrderController的indexByUser方法

不再接收URL传入的user_id参数,直接从认证实例中获取当前登录用户的ID查询订单:

public function indexByUser(Request $request)
{
    // 直接获取当前登录用户的ID,不受外部传参影响
    $userId = $request->user()->id;
    // 也可以用辅助函数 auth()->id() 获取
    // $userId = auth()->id();
    
    // 用该ID查询对应订单
    $orders = Order::where('user_id', $userId)->get();
    
    return response()->json($orders);
}

可选校验方案(如需保留URL传参)

如果有特殊场景必须保留URL中的user_id参数,需要增加权限校验逻辑,不匹配时直接返回403错误:

public function indexByUser(Request $request, $userId)
{
    // 校验传入的用户ID是否和当前登录用户ID一致,管理员可额外加判断放行
    if ($userId != $request->user()->id && !$request->user()->is_admin) {
        return response()->json(['message' => '无权访问其他用户数据'], 403);
    }
    
    $orders = Order::where('user_id', $userId)->get();
    return response()->json($orders);
}

内容的提问来源于stack exchange,提问作者Mane Jiménez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:27:03