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!