laravel 默认的web中间件和主动添加web中间件有什么区别?

  1. 我自定义了一个包,发现一个问题我在包中调用Auth::user()获取不到用户信息,发现原因是因为没有添加中间件引起的。但是默认的中间件也是web,我不清楚处原因是什么。
  2. 我跟踪源码发现是获取session的问题

clipboard.png
3.继续跟踪,发现 创建session驱动

clipboard.png
4.追踪到注册认证服务

clipboard.png
原因是传递过来的$app中的$this->app['session.store']问题?
使用默认web中间件:
clipboard.png
手动定义web中间件
clipboard.png

这个是我在我自定义包里面添加的路由,没有在route.php和api.php中定义路由,我必须这样子才可以在自定义包中通过Auth::user()访问到用户信息
clipboard.png

阅读 5.3k
2 个回答

你手动定义的web中间件?源码呢?
默认的web中间件是由N多个中间件组成的一个中间件组

 protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

里面有包括开启session、处理CSRFtoken、错误显示等中间件

你的路由在哪个文件里面定义的? routes/web.php 还是 routes/api.php ? 如果是api.php, 那默认没有Auth信息的. 因为这个api.php的中间件里面没有session.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题