Laravel+Inertia环境下如何保护API路由实现认证访问
在Laravel+Inertia+Jetstream环境中保护API端点的方法
1. 用Sanctum会话中间件直接保护API
Jetstream本身依赖Laravel Sanctum实现认证,所以你可以直接用auth:sanctum中间件保护api.php里的路由,不需要额外折腾令牌流程。
修改你的API路由,添加中间件:
Route::middleware('auth:sanctum')->get('/companies/{user_id}', [Controller::class, 'index']);
2. 前端请求无需手动传令牌
你现在的fetch代码完全不用改——Inertia和Jetstream已经帮你处理好了会话认证:用户登录后,Laravel会设置会话Cookie,浏览器发起同域请求时会自动携带这个Cookie,Sanctum会自动验证会话有效性,只要用户处于登录状态就能访问该API端点。
3. 可选:校验请求的用户ID与当前登录用户一致
为了防止用户通过修改URL中的user_id访问他人数据,建议在控制器里加一层权限校验:
public function index($userId) { // 如果请求的用户ID和当前登录用户ID不一致,返回403禁止访问 if (auth()->id() !== (int)$userId) { abort(403, '无权访问该资源'); } // 执行你的业务逻辑,比如查询该用户的公司数据 return \App\Models\Company::where('user_id', $userId)->get(); }
内容的提问来源于stack exchange,提问作者Santiago Aguirre Perez
相关产品推荐
相关产品推荐

