如何通过Laravel Auth Sanctum API实现用户仅查看自身工单
解决方案:Laravel API实现用户仅查看自身分配工单
1. 确保API路由启用认证中间件
首先确认你的API路由已绑定auth:api中间件,因为移动端API采用token认证而非session:
// routes/api.php Route::middleware('auth:api')->get('/homepage/technician', [HomepageController::class, 'technician']);
2. 重构HomepageController的technician方法
抛弃原Web系统的session查询逻辑,直接通过认证后的用户实例筛选工单:
方式一:利用模型关联(推荐)
先在User模型中定义与工单的关联关系:
// app/Models/User.php public function assignedTickets() { // 假设工单表关联字段为technician_id,根据实际表结构调整 return $this->hasMany(Ticket::class, 'technician_id'); }
然后在控制器中调用关联获取数据:
// app/Http/Controllers/HomepageController.php public function technician(Request $request) { // 获取当前已认证的用户 $user = $request->user(); // 拉取该用户被分配的所有工单 $tickets = $user->assignedTickets()->get(); return response()->json([ 'status' => 'success', 'data' => $tickets ]); }
方式二:直接条件查询
若未定义模型关联,可直接通过用户ID筛选:
public function technician(Request $request) { $userId = $request->user()->id; // 根据工单表实际关联字段调整条件 $tickets = Ticket::where('technician_id', $userId)->get(); return response()->json([ 'status' => 'success', 'data' => $tickets ]); }
3. 验证请求的Token传递
移动端请求API时,必须在请求头中携带Token:
Authorization: Bearer {你的认证令牌}
4. 排查常见问题
- 确认工单表的用户关联字段名称与代码一致(如
technician_id是否为实际字段名) - 先返回
$request->user()验证用户是否认证成功,排除令牌无效或传递错误的问题 - 检查Ticket模型的
$fillable属性,确保需要返回的字段已被允许序列化
内容的提问来源于stack exchange,提问作者teachmelearning
相关产品推荐
相关产品推荐

