AuthServiceProvider.php
TLDR
This file is the AuthServiceProvider
class in the Illuminate\Auth namespace. It extends the ServiceProvider
class and provides methods for registering authentication-related services.
Methods
register
This method is responsible for registering the service provider. It calls several other methods to register various authenticator services and handlers.
registerAuthenticator
This method registers the authenticator services. It defines singletons for the auth
and auth.driver
services.
registerUserResolver
This method registers a resolver for the authenticated user. It binds the AuthenticatableContract
interface to a closure that calls the user resolver function.
registerAccessGate
This method registers the access gate service. It defines a singleton for the GateContract
interface and initializes it with the application instance and a closure that calls the user resolver function.
registerRequirePassword
This method registers a resolver for the authenticated user. It binds the RequirePassword
middleware class to a closure that creates a new instance of the class with the necessary dependencies.
registerRequestRebindHandler
This method handles the re-binding of the request binding. It defines a rebind callback that sets a new user resolver for the request.
registerEventRebindHandler
This method handles the re-binding of the event dispatcher binding. It defines a rebind callback that sets the dispatcher for the authentication guard if it supports the setDispatcher
method.
Classes
No additional classes are defined in this file.
<?php
namespace Illuminate\Auth;
use Illuminate\Auth\Access\Gate;
use Illuminate\Auth\Middleware\RequirePassword;
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Support\ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->registerAuthenticator();
$this->registerUserResolver();
$this->registerAccessGate();
$this->registerRequirePassword();
$this->registerRequestRebindHandler();
$this->registerEventRebindHandler();
}
/**
* Register the authenticator services.
*
* @return void
*/
protected function registerAuthenticator()
{
$this->app->singleton('auth', fn ($app) => new AuthManager($app));
$this->app->singleton('auth.driver', fn ($app) => $app['auth']->guard());
}
/**
* Register a resolver for the authenticated user.
*
* @return void
*/
protected function registerUserResolver()
{
$this->app->bind(AuthenticatableContract::class, fn ($app) => call_user_func($app['auth']->userResolver()));
}
/**
* Register the access gate service.
*
* @return void
*/
protected function registerAccessGate()
{
$this->app->singleton(GateContract::class, function ($app) {
return new Gate($app, fn () => call_user_func($app['auth']->userResolver()));
});
}
/**
* Register a resolver for the authenticated user.
*
* @return void
*/
protected function registerRequirePassword()
{
$this->app->bind(RequirePassword::class, function ($app) {
return new RequirePassword(
$app[ResponseFactory::class],
$app[UrlGenerator::class],
$app['config']->get('auth.password_timeout')
);
});
}
/**
* Handle the re-binding of the request binding.
*
* @return void
*/
protected function registerRequestRebindHandler()
{
$this->app->rebinding('request', function ($app, $request) {
$request->setUserResolver(function ($guard = null) use ($app) {
return call_user_func($app['auth']->userResolver(), $guard);
});
});
}
/**
* Handle the re-binding of the event dispatcher binding.
*
* @return void
*/
protected function registerEventRebindHandler()
{
$this->app->rebinding('events', function ($app, $dispatcher) {
if (! $app->resolved('auth') ||
$app['auth']->hasResolvedGuards() === false) {
return;
}
if (method_exists($guard = $app['auth']->guard(), 'setDispatcher')) {
$guard->setDispatcher($dispatcher);
}
});
}
}