Devs estão sempre em busca de dicas extras para facilitar a rotina de trabalho. E, dentro deste universo, uma das coisas que mais acaba dando dor de cabeça é a modificação da validação de credenciais dentro de um sistema. A autenticação em Laravel é uma ótima alternativa e não é algo tão difícil de ser feito. Com o Laravel é possível criar um login padrão (com email ou username e senha) para autenticar os usuários no sistema a ser desenvolvido. A autenticação está descrita na documentação na área de Segurança > Autenticação.
Seguindo a documentação, você cria o login com as views, controllers, models e migrations para criação da tabela no banco de dados. Até aqui, tudo bem, certo? Pois bem, as dúvidas costumam surgir quando se tem uma base de dados já em produção e o novo sistema que está desenvolvendo precisa utilizá-la para fazer a autenticação dos usuários. Normalmente, a senha está encriptada dentro desta base de dados, apresentando um padrão diferente do que o Laravel utiliza. Por isso, vou mostrar como alterar a forma que o Laravel valida as credenciais do usuário. Assim, você poderá construir sua lógica de validação e autenticar os seus usuários.
Autenticação padrão do Laravel
O primeiro passo é fazer a autenticação padrão do Laravel, conforme disponibilizado nesta documentação. Em seguida, é necessário que você faça a alteração do config/auth.php. O processo é facilitado pelo uso de guards e providers.
- Guards definem como os usuários são autenticados para cada requisição de login. Por exemplo, o Laravel vem com session guard que mantém o estado usando armazenamento de sessão e cookies. Então é necessário alterar o config/auth.php e criar um guard customizado e identificá-lo no provider.
- Provider é a parte a ser estendida e a responsável por prover o override do método de validação das credenciais.
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'csauth', ],
'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false, ],
'customcs' => [ 'driver' => 'session', 'provider' => 'csauth', ] ],
No provider, você deve fazer a seguinte alteração:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'csauth' => [
'driver' => 'customcs',
'model' => App\User::class,
]
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
Alterando do app/Providers/AuthServiceProvider.php
Este Provider é responsável por determinar qual é o método de autenticação que será utilizado pelo Laravel. Quando não há alterações no método boot(), significa que o Laravel continuará utilizando seu método padrão. Aqui, vamos usar o CustomEloquentUserProvider . Para isso, add ao método boot() :
public function boot()
{
$this->registerPolicies();
Auth::provider('customcs', function ($app, array $config) {
return $app->make(CustomEloquentUserProvider::class, ['model' => $config['model']]);
});
}
Criando o Provider app/Providers/CustomEloquentUserProvider****.php
Neste Provider, vamos adicionar a nossa validação personalizada das credenciais. Com isso, você pode implementar qualquer tipo de lógica e seguir a requisição do seu projeto. No método validateCredentials, se o feedback retornar true, significa que o seu usuário está logado.
php namespace App\\Providers; use Illuminate\\Auth\\EloquentUserProvider; use Illuminate\\Contracts\\Auth\\UserProvider; use Illuminate\\Contracts\\Auth\\Authenticatable as UserContract; class CustomEloquentUserProvider extends EloquentUserProvider { public function validateCredentials(UserContract $user, array $credentials) { $plain = $credentials\['password'\]; if ($plain == $seuModoDeValidacao) { return true; } else { return false; } // caso queira continuar autenticando pelo modo padrao do Laravel // ou seja, validar dos dois modos, utilize a linha de codigo abaixo // return parent::validateCredentials($user, $credentials); } } ## **Agora você pode validar qualquer credencial** Para concluir, também introduzi uma forma de você criar o seu próprio **_UserProvider_**. A vantagem de implementar a lógica no provider é que, além de permitir autenticar pelas credenciais utilizando sempre o mesmo algoritmo, **fica fácil de compartilhar entre projetos ou múltiplos _guards_.** Todo **_UserProvider_** tem que possuir um método _validateCredentials,_ que valida o _hash_ da senha com o que foi encontrado no banco de dados. Vale lembrar que você não precisa criar um _provider_ do zero. Você pode criar um que estende o user provider do Laravel e substituir apenas este método. Agora é hora de você validar qualquer credencial que precisar ou até mesmo criar algum User. Se precisar de mais dicas como essas, é só acompanhar o nosso Blog. E se tiver dúvidas, você pode tirá-las dentro da nossa [comunidade do Discord](http://impulso.link/discord), onde temos vários devs especialistas à disposição!Continue lendo



