在 laravel 服务提供商 boot() 方法中使用 'auth:web' 中间件定义路由
defining route with 'auth:web' middleware in laravel service provider boot() method
我正在使用一个名为 https://github.com/garygreen/pretty-routes 的包
它的服务提供商 boot() 方法中有一行 (here the code)
它正在从它的配置文件中定义一个带有中间件的获取路由(link to the code)我刚刚将 'auth:web' 添加到它的配置文件中,但似乎 'auth:web' 中间件被尽快调用当代码在 Laravel 引导其 session 之前到达该行时,当 auth('web')->user() 尚未 null
我无法理解的是,我用 laravel/telescope 做了完全相同的事情 (here the code),但它有效。 为什么???
也在改变:
Route::get(config('pretty-routes.url'), 'PrettyRoutes\PrettyRoutesController@show')
->name('pretty-routes.show')
->middleware(config('pretty-routes.middlewares'));
至:
$this->app['router']->get(config('pretty-routes.url'), 'PrettyRoutes\PrettyRoutesController@show')
->name('pretty-routes.show')
->middleware(config('pretty-routes.middlewares'));
in service provider 似乎解决了这个问题,并使此代码的行为类似于 telescope 包使用 'auth:web' 作为中间件的方式。
发生什么事了?
您需要将 web
中间件应用于您需要 session 的任何路由,这是默认身份验证系统正在使用的。当您在没有这个的情况下应用 auth
中间件时,它可能无法解析用户,因为没有 session 可以进行身份验证。
您需要应用 web
中间件,然后再应用您想要的任何其他中间件:
'middlewares' => [
'web', 'auth:web',
],
如果您查看您提供的 telescope 示例,您会发现他们还添加了 web
中间件。所以你并没有完全“做同样的事情”作为 telescope 配置。
我正在使用一个名为 https://github.com/garygreen/pretty-routes 的包 它的服务提供商 boot() 方法中有一行 (here the code)
它正在从它的配置文件中定义一个带有中间件的获取路由(link to the code)我刚刚将 'auth:web' 添加到它的配置文件中,但似乎 'auth:web' 中间件被尽快调用当代码在 Laravel 引导其 session 之前到达该行时,当 auth('web')->user() 尚未 null
我无法理解的是,我用 laravel/telescope 做了完全相同的事情 (here the code),但它有效。 为什么??? 也在改变:
Route::get(config('pretty-routes.url'), 'PrettyRoutes\PrettyRoutesController@show')
->name('pretty-routes.show')
->middleware(config('pretty-routes.middlewares'));
至:
$this->app['router']->get(config('pretty-routes.url'), 'PrettyRoutes\PrettyRoutesController@show')
->name('pretty-routes.show')
->middleware(config('pretty-routes.middlewares'));
in service provider 似乎解决了这个问题,并使此代码的行为类似于 telescope 包使用 'auth:web' 作为中间件的方式。 发生什么事了?
您需要将 web
中间件应用于您需要 session 的任何路由,这是默认身份验证系统正在使用的。当您在没有这个的情况下应用 auth
中间件时,它可能无法解析用户,因为没有 session 可以进行身份验证。
您需要应用 web
中间件,然后再应用您想要的任何其他中间件:
'middlewares' => [
'web', 'auth:web',
],
如果您查看您提供的 telescope 示例,您会发现他们还添加了 web
中间件。所以你并没有完全“做同样的事情”作为 telescope 配置。