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. ```json { "repositories": [ { "type": "git", "url": "https://git.ae3tecnologia.com.br/AE3_TECNOLOGIA_OPENSOURCE/ae3-auth.git" } ] } ``` 2) Execute o comando a seguir para baixar esta lib ao vendor do seu projeto. ``` composer require ae3/ae3auth ``` 3) 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" ``` 4) Execute o comando abaixo para criar a tabela de usuários e a tabela de senhas. ``` php artisan ae3auth:publish ``` 5) Execute o comando abaixo para criar as tabelas de usuários e senhas. ``` php artisan migrate ``` 6) Validação de senhas Para validar a nova senha do usuário, no FormRequest, adicione a seguinte regra: ```php use Pablo\Ae3auth\app\Rules\CheckUsedPasswordRule; public function rules(): array { return [ 'password' => [ Password::defaults(), new CheckUsedPasswordRule() ], ]; } ``` - Caso necessário, a trait ```ValidationErrorResponse``` pode ser adicionada ao FormRequest para enviar uma mensagem personalizada para o client ```php use Pablo\Ae3auth\app\Traits\ValidationErrorResponse use Illuminate\Contracts\Validation\Validator; ... protected function failedValidation(Validator $validator) { $this->throwAndReturnJsonResponse($validator, 'sua mensagem'); } ``` 7) 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```: ``` 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```: ``` php ... use \Illuminate\Support\Facades\Schedule; ... Schedule::call('ae3auth:invalidate-expired-passwords')->daily(); ``` 8) Adicione o atributo de data de expiração para o usuário e trait para validação de senhas ```php use App\Models\User; use \Pablo\Ae3auth\app\Traits\HasPasswordValidation; class User extends Authenticatable { use HasPasswordValidation; ... /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ ... 'password_expires_at' ]; ... } ``` 9) MMiddleware Para validação das rotas com a data de validação das senhas, adicione o middleware: - Versão 10.*: ```app\Http\Kernel.php``` ```php protected $routeMiddleware = [ ... \Pablo\Ae3auth\app\Http\InvalidPasswordMiddleware::class, ]; ``` - Versão 11.* ```bootstrap/app.php``` ```php 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(); ```