You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ae3-auth/README.md

5.0 KiB

A&3 Logo

Ae3 Auth

Esta lib padroniza o processo de autenticação e gerência de senhas utilizados na Ae3

Requisitos

  • PHP >= 8.1
  • Laravel >= 10.*
  • Composer >= v2

Como configurar o projeto?

  1. Adicione este repositório à lista de repositórios do composer em seu projeto laravel.
{
  "repositories": [
    {
      "type": "git",
      "url": "https://git.ae3tecnologia.com.br/AE3_TECNOLOGIA_OPENSOURCE/ae3-auth.git"
    }
  ]
}


  1. Execute o comando a seguir para baixar esta lib ao vendor do seu projeto.
composer require ae3/ae3auth
  1. Configure as variáveis abaixo no .env do seu projeto.
USERS_TABLE="Nome da tabela de usuários | users"
MIN_PASSWORD_LENGTH="Tamanho mínimo da senha | 8"
PASSWORD_HISTORY_TABLE="Nome da tabela de senhas a serem mantidas na base de dados | password_histories"
MAX_STORE_PASSWORDS="Quantidade máxima de senhas | 3"
USERNAME_COLUMN="Nome da coluna de usuário | username"
FORCE_CHANGE_COLUMN_NAME="Nome da coluna de alteração | force_change_password"
EXPIRES_PASSWORD_COLUMN_NAME="Nome da coluna de expiração | password_expires_at"
USER_MODEL="Modelo de usuário | App\\Models\\User"
PASSWORD_COLUMN="Nome da coluna de senha | password"
PASSWORD_EXPIRES_IN="Quantidade de dias que as senhas são válidas | 30"
  1. Execute o comando abaixo para criar a tabela de usuários e a tabela de senhas.
php artisan ae3auth:publish
  1. Execute o comando abaixo para criar as tabelas de usuários e senhas.
php artisan migrate
  1. Validação de senhas

Para validar a nova senha do usuário, no FormRequest, adicione a seguinte regra:

use Pablo\Ae3auth\app\Rules\CheckUsedPasswordRule;

public function rules(): array
{
    return [
        'password' => [
            new CheckUsedPasswordRule()
        ],
    ];
}
  • Caso necessário, a trait ValidationErrorResponse pode ser adicionada ao FormRequest para enviar uma mensagem personalizada para o client
use Pablo\Ae3auth\app\Traits\ValidationErrorResponse
use Illuminate\Contracts\Validation\Validator;

...

protected function failedValidation(Validator $validator)
{
    $this->throwAndReturnJsonResponse($validator, 'sua mensagem');
}

  1. Invalidando senhas expiradas

Para invalidar as senhas expiradas, execute o comando abaixo:

php artisan ae3auth:invalidate-expired-passwords

Ou adicione a chamada para o comando no arquivo de schedule do seu projeto para ser executado pelo cron do sistema.

Versão 10.*: Adicione ao arquivo app\Console\Kernel.php:

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        ...
        $schedule->command('ae3auth:invalidate-expired-passwords')->daily();
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}

Versão >= 11.*: Adicione ao arquivo routes/console.php:

...
use \Illuminate\Support\Facades\Schedule;

...
Schedule::call('ae3auth:invalidate-expired-passwords')->daily();
  1. Adicione o atributo de data de expiração para o usuário e trait para validação de senhas
use App\Models\User;
use \Pablo\Ae3auth\app\Traits\HasPasswordValidation;

class User extends Authenticatable
{
    use HasPasswordValidation;
    ...
    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        ...
        'password_expires_at'
    ];
    ...
}
  1. MMiddleware

Para validação das rotas com a data de validação das senhas, adicione o middleware:

  • Versão 10.*: app\Http\Kernel.php
protected $routeMiddleware = [
        ...
        \Pablo\Ae3auth\app\Http\InvalidPasswordMiddleware::class,
];
  • Versão 11.* bootstrap/app.php
<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->alias([
            'ae3auth-invalid-password' => \Pablo\Ae3auth\app\Http\InvalidPasswordMiddleware::class,
        ]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();