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

Laravel中如何为非默认User模型的自定义模型创建auth令牌

Laravel Sanctum 非User模型令牌实现方案

Laravel Sanctum原生支持多模型令牌发放与校验,不需要修改框架核心代码,按以下步骤配置即可:

  • 第一步:给目标模型引入能力Trait
    所有需要发放令牌的模型,必须先继承Illuminate\Foundation\Auth\User认证基类,再引入Laravel\Sanctum\HasApiTokensTrait,示例:
    <?php
    namespace App\Models;
    
    use Illuminate\Foundation\Auth\User as Authenticatable;
    use Laravel\Sanctum\HasApiTokens;
    
    class Customer extends Authenticatable
    {
        use HasApiTokens;
        // 模型其余原有逻辑
    }
    
  • 第二步:新增认证守卫与用户提供者配置
    打开config/auth.php配置文件,在对应节点新增自定义模型的guard和provider,不要覆盖原有默认配置,避免影响原有User模型的认证逻辑:
    'guards' => [
        // 保留原有web、api等默认守卫
        'customer' => [
            'driver' => 'sanctum',
            'provider' => 'customers',
        ],
    ],
    
    'providers' => [
        // 保留原有users等默认提供者
        'customers' => [
            'driver' => 'eloquent',
            'model' => App\Models\Customer::class,
        ],
    ],
    
  • 第三步:令牌发放逻辑
    令牌创建逻辑和默认User模型完全一致,直接调用模型实例的createToken方法即可:
    // 以Customer登录逻辑为例
    $customer = Customer::where('mobile', $request->mobile)->first();
    if (!Hash::check($request->password, $customer->password)) {
        return response()->json(['message' => '认证失败'], 401);
    }
    // 生成明文令牌,直接返回给前端存储即可
    $token = $customer->createToken('customer-access')->plainTextToken;
    return response()->json(['token' => $token]);
    
  • 第四步:路由令牌校验
    受保护路由使用auth:sanctum中间件时,把上一步自定义的守卫名作为参数传入,即可自动对应到目标模型做令牌校验:
    // routes/api.php
    Route::group(['middleware' => 'auth:sanctum:customer'], function () {
        Route::get('/customer/info', function () {
            // 获取当前认证的Customer模型实例
            return auth('customer')->user();
        });
    });
    

注意事项:

  1. 多模型同时使用Sanctum时不需要修改personal_access_tokens表结构,Sanctum会自动通过表内的tokenable_type字段区分令牌归属模型,不同模型的令牌逻辑完全隔离互不影响
  2. 不要直接修改Sanctum包内的源码或者默认配置项,所有自定义逻辑通过新增guard的方式实现即可,后续升级框架版本不会出现兼容问题
  3. 如果需要修改令牌默认过期时间、能力范围等规则,非User模型的配置方式和User模型完全一致,直接在createToken方法传参或者在AuthServiceProvider里配置即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:01:00