槽痞

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

SanctumServiceProviderAuthManager 的关系如下:

1. AuthManager 的作用


2. SanctumServiceProvider 的作用


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. 总结


关系图

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

如需源码细节,可查阅:

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »