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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:20:13