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

Laravel10 Sanctum鉴权:同一API路由区分访客与登录用户

修复Laravel Sanctum API身份识别问题,区分访客与已登录用户

1. 调整路由配置(关键前提)

当前路由未启用Sanctum的认证中间件,导致auth()->check()无法正确识别请求中的Token。需要将路由组修改为支持可选认证(访客和登录用户都能访问,同时正确识别身份):

Route::group(['middleware' => ['api', 'Cors', 'auth:sanctum?']], function(){
    Route::get('/header', [SettingController::class, 'index']);
});

注:auth:sanctum?中的?表示该中间件为可选,不会拒绝未携带Token的请求,但会自动验证合法Token并绑定认证用户。

2. 修复Header API逻辑

修改index方法,解决布尔值错误使用Resource集合的问题,并添加身份标识字段:

public function index(Request $request): JsonResponse
{
    // 初始化默认身份为访客,用户数据为空
    $this->body['identity'] = 'guest';
    $this->body['UserData'] = [];

    // 判断是否为已登录用户
    if (auth()->check()) {
        $user = auth()->user(); // 获取当前认证用户的模型实例
        $this->body['identity'] = 'client';
        $this->body['UserData'] = UserResource::make($user); // 单个用户用make()而非collection()
    }

    // 获取导航菜单数据
    $categories = Menu::query()->where('active', 1)->orderBy('rank', 'ASC')->get();
    $this->body['navbarData'] = MenuResource::collection($categories);

    return response()->json(['data' => $this->body, 'error' => ''], 200);
}

修改点说明

  • 新增身份标识:添加identity字段,直接在响应中明确当前访问者类型(guest/client)
  • 用户数据修正:用auth()->user()替代auth()->check(),前者返回用户模型实例,后者仅返回布尔值
  • Resource使用修正:单个用户数据使用UserResource::make($user),collection()仅用于处理多用户集合
  • 简化逻辑:初始化默认访客状态,仅在登录时覆盖状态和数据,避免冗余判断

修改后的响应示例

// 访客请求(无Token)
{
  "data": {
    "identity": "guest",
    "UserData": [],
    "navbarData": [
      {"title": "Home", "path": "/"},
      {"title": "AboutUs", "path": "/AboutUs"},
      {"title": "ContactUs", "path": "/ContactUs"}
    ]
  },
  "error": ""
}

// 已登录用户请求(携带有效Token)
{
  "data": {
    "identity": "client",
    "UserData": {
      "id": 1,
      "name": "John Doe",
      "email": "john@example.com"
    },
    "navbarData": [
      {"title": "Home", "path": "/"},
      {"title": "AboutUs", "path": "/AboutUs"},
      {"title": "ContactUs", "path": "/ContactUs"}
    ]
  },
  "error": ""
}

内容的提问来源于stack exchange,提问作者AhmedSamy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:00:38