auth:sanctum中件间是如何被注入到laravel中的?

2025-07-07T23:34:00

SanctumServiceProviderAuthManager 的关系如下:

1. AuthManager 的作用

  • AuthManager 是 Laravel 框架核心的认证管理器,负责管理所有的认证 guard(如 session、token、sanctum 等)。
  • 它通过 extend() 方法允许第三方包或应用扩展自定义的 guard 驱动。
  • 当你调用 auth('xxx')Auth::guard('xxx') 时,AuthManager 会根据配置和注册的驱动返回对应的 guard 实例。

2. SanctumServiceProvider 的作用

  • SanctumServiceProvider 是 Sanctum 包的服务提供者。
  • 它的核心任务之一,就是通过调用 AuthManager::extend() 方法,向 Laravel 注册一个名为 sanctum 的自定义 guard 驱动。
  • 这样,auth:sanctum 中间件或 guard('sanctum') 就能被 Laravel 识别和使用。

3. 两者的关系(流程)

  1. 服务提供者注册阶段
    Laravel 启动时会自动加载 SanctumServiceProvider
  2. 扩展 Guard
    SanctumServiceProviderboot()register() 方法中,调用如下代码(伪代码,实际见 vendor/laravel/sanctum/src/SanctumServiceProvider.php):

    $this->app['auth']->extend('sanctum', function ($app, $name, array $config) {
        // 返回 Sanctum 的 Guard 实例
    });

    这里的 $this->app['auth'] 实际上就是 AuthManager 实例。

  3. AuthManager::extend()
    extend() 方法会把 sanctum 驱动的创建逻辑注册到 $customCreators 数组中。
  4. 路由或中间件使用
    当你在路由中用 auth:sanctum 时,Laravel 会通过 AuthManager 查找并实例化 sanctum guard,执行认证逻辑。

4. 总结

  • SanctumServiceProvider 负责注册 sanctum guard 到 AuthManager
  • AuthManager 负责统一管理和调度所有 guard,包括 sanctum。
  • 这种机制让 Laravel 的认证系统高度可扩展,第三方包(如 Sanctum)可以无缝集成自定义认证方式。

关系图

graph TD
    A[SanctumServiceProvider] -- 调用 extend('sanctum') --> B[AuthManager]
    B -- 统一管理 --> C[Sanctum Guard 实例]
    D[auth:sanctum 中间件] -- 通过 AuthManager 获取 --> C

如需源码细节,可查阅:

  • vendor/laravel/sanctum/src/SanctumServiceProvider.php
  • vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »