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.
202 lines
4.6 KiB
Markdown
202 lines
4.6 KiB
Markdown
<p align="center"><a href="https://ae3tecnologia.com.br/" target="_blank"><img src="./resources/images/ae3.svg" width="200" alt="A&3 Logo"></a></p>
|
|
|
|
## 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://github.com/Pablo304/auth"
|
|
}
|
|
]
|
|
}
|
|
|
|
|
|
```
|
|
|
|
2) Execute o comando a seguir para baixar esta lib ao vendor do seu projeto.
|
|
|
|
```
|
|
composer require pablo/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 [
|
|
'<campo_username' => '<rules>',
|
|
'password' => [
|
|
Password::defaults(),
|
|
new CheckUsedPasswordRule()
|
|
],
|
|
];
|
|
}
|
|
```
|
|
|
|
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<int, string>
|
|
*/
|
|
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
|
|
<?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([
|
|
'auth.invalid-password' => \Pablo\Ae3auth\app\Http\InvalidPasswordMiddleware::class,
|
|
]);
|
|
})
|
|
->withExceptions(function (Exceptions $exceptions) {
|
|
//
|
|
})->create();
|
|
```
|