Authenticators
Authenticators are responsible for authenticating credentials and login attempts.
Authenticator Extension
This section will go over the \Anomaly\UsersModule\User\Authenticator\AuthenticatorExtension class.
AuthenticatorExtension::authenticate()
The authenticate method is responsible for authenticating the credentials and returning null, a user, or a redirect.
Returns: \Anomaly\UsersModule\User\Contract\UserInterface or \Illuminate\Http\RedirectResponse or null
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$credentials |
true |
array |
none |
The login information. |
Writing Authenticators
This section will show you how to write your own custom authenticator extension.
Creating the extension
The first thing we need to do is to use the make:addon command to create our extension:
php artisan make:addon anomaly.extension.default_authenticator
Extending the authenticator extension
The extension you create must extend the \Anomaly\UsersModule\User\Authenticator\AuthenticatorExtension class:
<?php namespace Anomaly\DefaultAuthenticatorExtension;
use Anomaly\DefaultAuthenticatorExtension\Command\AuthenticateCredentials;
use Anomaly\UsersModule\User\Authenticator\AuthenticatorExtension;
use Anomaly\UsersModule\User\Contract\UserInterface;
class DefaultAuthenticatorExtension extends AuthenticatorExtension
{
/**
* This extensions provides a basic
* authenticator for the users module.
*
* @var string
*/
protected $provides = 'anomaly.module.users::authenticator.default';
/**
* Authenticate a set of credentials.
*
* @param array $credentials
* @return null|UserInterface
*/
public function authenticate(array $credentials)
{
return $this->dispatch(new AuthenticateCredentials($credentials));
}
}
You must define the provides property as anomaly.module.users::authenticator.your_widget_slug so that it's picked up as a supported extension.
Authenticating credentials
The primary task of any authenticators is to authenticate a login request. In this example we will use a command thats dispatched within the authenticate method to check the credentials:
public function authenticate(array $credentials)
{
return $this->dispatch(new AuthenticateCredentials($credentials));
}
Our AuthenticateCredentials command is responsible for the actual work:
<?php namespace Anomaly\DefaultAuthenticatorExtension\Command;
use Anomaly\UsersModule\User\Contract\UserRepositoryInterface;
class AuthenticateCredentials
{
/**
* The credentials to authenticate.
*
* @var array
*/
protected $credentials;
/**
* Create a new AuthenticateCredentials instance.
*
* @param array $credentials
*/
public function __construct(array $credentials)
{
$this->credentials = $credentials;
}
/**
* Handle the command.
*
* @param UserRepositoryInterface $users
* @return \Anomaly\UsersModule\User\Contract\UserInterface|null
*/
public function handle(UserRepositoryInterface $users)
{
if (!isset($this->credentials['password']) && !isset($this->credentials['email'])) {
return null;
}
return $users->findByCredentials($this->credentials);
}
}
Redirecting authentication requests
The authenticate method can return an instance of the user, null, or a redirect instance. In the case a redirect is returns the request will be redirected immediately. After the redirect is made the authentication will be in your hands!