Customizando o serviço de autenticação do Laravel
Posted on: September 07, 2023 10:37 PM
Posted by: Renato
Views: 335
Customizando o serviço de autenticação do Laravel
.
Introdução
O Laravel possui um sistema de registro e autenticação pronto de fábrica muito completo e seguro que pode ser instalado com apenas alguns passos e recentemente um leitor me pediu para que eu o auxiliasse na alteração o login trocando o e-mail por um usuário. Pensando nisso, o artigo de hoje, será como alterar alguns pontos principais de autenticação e registro de usuários.
Adicionando mais campos ao formulário de registro
Antes de explicar como trocar o endereço de e-mail pelo nome do usuário vamos começar adicionando novos campos ao formulário, até mesmo porque essa etapa será necessária para realizar a troca. Para exemplificar, vamos adicionar o campo sobrenome e usuário que serão chamados de surname e username, respectivamente, para mantermos o padrão do Laravel que é o Inglês.
O primeiro passo é adicionar o campo à nossa tabela através de uma migration. Vamos criar uma nova migration com o comando abaixo:
php artisan make:migration --table users adicionar_campos_em_users_migration
Veja que foi criado um arquivo em database/migrations/{data}_adicionar_campos_em_users_migration.php com a classe AdicionarCamposEmUsersMigration. Altere o método up() para que ele adicione um novo campo à tabela:
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('surname');
$table->string('username');
});
}
Agora execute a migration para que ela altere de fato a tabela:
php artisan migrate
O segundo passo é declarar os novos campos como “preenchíveis” no modelo User encontrado em app/User.php (alteração em destaque):
$fillable = [
'name',
'email',
'surname',
'username’,
];
Feito isso, a última etapa é adicionar os campos no formulário de registro. Vamos editar o arquivo resources/views/auth/register.blade.php:
@if ($errors->has('surname'))
{{ $errors->first('surname') }}
@endif
@if ($errors->has('username'))
{{ $errors->first('username') }}
@endif
@if ($errors->has('surname'))
{{ $errors->first('surname') }}
@endif
@if ($errors->has('username'))
{{ $errors->first('username') }}
@endif
Para finalizar basta alterar o método create() da classe RegisterController (app/Http/Controllers/Auth/RegisterController.php) e adicionar os novos campos:
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'surname' => $data['surname'],
'username' => $data['username'],
]);
}
Logando com usuário ao invés de e-mail
Por padrão o Laravel utiliza o endereço de e-mail por ele ser uma informação já conhecida pelo usuário e pelo fato de ser único, mas se você quiser alterar essa informação basta seguir o exemplo acima e adicionar o campo na tabela, no modelo e na view e depois sobrescrever o método username() na classe LoginController (app/Http/Controllers/Auth/LoginController.php), pois se você analisar o código, verá que a classe LoginController importa a classe AuthenticatesUsers:
class LoginController extends Controller { use AuthenticatesUsers; ...
Ao verificar a classe AuthenticatesUsers nós podemos encontrar um método chamado username() que retorna o campo que será utilizado para autenticação:
public function username() { return 'email'; }
Como não podemos alterar o método direto na classe, basta redeclará-la na classe LoginController e alterar o retorno para o nome do campo, no caso, username:
public function username() { return 'username'; }
Alterar a validação dos campos
Por padrão todos os quatro campos do formulário de registro são obrigatórios, mas se você quiser alterar ou adicionar qualquer validação ou até mesmo adicionar alguma validação para os campos que você adicionou no formulário de registro basta alterar o método validator() da classe RegisterController (app/Http/Controllers/Auth/RegisterController.php):
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:6', 'max:255', 'confirmed'],
'type' => ['required', 'string'],
'username' => ['required', 'string', 'max:255', 'min:6', 'unique:users'],
]);
}
No código acima eu defini que o campo password pode ter no máximo 255 caracteres, e que o campo username deve ser obrigatório, do tipo texto, com no máximo 255 caracteres, no mínimo 6 caracteres e único, ou seja, ninguém mais pode ter o mesmo valor coluna username na tabela users.
Habilitar a verificação de e-mail
Esta é uma função que vem desabilitada por padrão no Laravel 5.7 mas todas as rotas e campos já estão implementados, somente inativos. Para habilitar a verificação basta alterar a rota passando a verificação como true no arquivo routes/web.php:
Auth::routes(['verify' => true]);
Agora para proteger uma rota e garantir que ela seja acessada somente por pessoas verificadas utilize o middleware verified, como nos exemplos abaixo:
Route::get('profile', function () { // ... })->middleware('verified'); Route::resource('/imagens', 'ImagemController') ->middleware('verified');
Desabilitar a redefinição de senha
Aproveitando o gancho do item anterior, é possível desabilitar a função de redefinir a senha praticamente da mesma forma que passo anterior, basta alterar a rota com o parâmetro reset como falso:
Auth::routes(['reset' => false]);
Se você estiver como se perguntando como fazer para que o seu sistema tenha uma verificação de e-mail e não permita a redefinição de senha, fique tranquilo! É possível passar todos os parâmetros,visto que estamos passando na verdade um array:
Auth::routes([ 'reset' => false, 'verify' => true, ]);
Desabilitar novos registros
Como você deve adivinhar para desabilitar os novos registros é muito simples e feito da mesma forma que as dicas anteriores, basta adicionar o parâmetro register e defini-lo como falso.
Auth::routes(['register' => false]);
Conclusão
No artigo de hoje vimos como é simples alterar as configurações do sistema de registro e autenticação do Laravel. Você deve ter percebido que grande parte das funcionalidades podem ser ativadas, desativas ou alteradas nos controllers ou diretamente na declaração da rota.
Espero muito que tenha gostado e até a próxima!
. Fonte: http://theclub.com.br/Restrito/Revistas/201904/CUST1904.ASPX
4
Donate to Site
About Author
Renato
Developer
Add a Comment
Blog Search
Categories
OUTROS (16)
Variados (109)
PHP (133)
Laravel (171)
Black Hat (3)
front-end (29)
linux (114)
postgresql (39)
Docker (28)
rest (5)
soap (1)
webservice (6)
October (1)
CMS (2)
node (7)
backend (13)
ubuntu (56)
devops (25)
nodejs (5)
npm (3)
nvm (1)
git (8)
firefox (1)
react (7)
reactnative (5)
collections (1)
javascript (7)
reactjs (8)
yarn (0)
adb (1)
Solid (2)
blade (3)
models (1)
controllers (0)
log (1)
html (2)
hardware (3)
aws (14)
Transcribe (2)
transcription (1)
google (4)
ibm (1)
nuance (1)
PHP Swoole (5)
mysql (31)
macox (4)
flutter (1)
symfony (1)
cor (1)
colors (2)
homeOffice (2)
jobs (3)
imagick (2)
ec2 (1)
sw (1)
websocket (2)
markdown (1)
ckeditor (1)
tecnologia (14)
faceapp (1)
eloquent (14)
query (4)
sql (40)
ddd (3)
nginx (9)
apache (4)
certbot (1)
lets-encrypt (3)
debian (12)
liquid (1)
magento (2)
ruby (1)
LETSENCRYPT (1)
Fibonacci (1)
wine (1)
transaction (1)
pendrive (1)
boot (1)
usb (1)
prf (1)
policia (2)
federal (1)
lucena (1)
mongodb (4)
paypal (1)
payment (1)
zend (1)
vim (4)
ciencia (6)
js (1)
nosql (1)
java (1)
JasperReports (1)
phpjasper (1)
covid19 (1)
saude (1)
athena (1)
cinnamon (1)
phpunit (2)
binaural (1)
mysqli (3)
database (42)
windows (6)
vala (1)
json (2)
oracle (1)
mariadb (4)
dev (12)
webdev (24)
s3 (4)
storage (1)
kitematic (1)
gnome (2)
web (2)
intel (3)
piada (1)
cron (2)
dba (18)
lumen (1)
ffmpeg (2)
android (2)
aplicativo (1)
fedora (2)
shell (4)
bash (3)
script (3)
lider (1)
htm (1)
csv (1)
dropbox (1)
db (3)
combustivel (2)
haru (1)
presenter (1)
gasolina (1)
MeioAmbiente (1)
Grunt (1)
biologia (1)
programming (22)
performance (3)
brain (1)
smartphones (1)
telefonia (1)
privacidade (1)
opensource (3)
microg (1)
iode (1)
ssh (3)
zsh (2)
terminal (3)
dracula (1)
spaceship (1)
mac (2)
idiomas (1)
laptop (2)
developer (37)
api (5)
data (1)
matematica (1)
seguranca (2)
100DaysOfCode (9)
hotfix (1)
documentation (1)
laravelphp (10)
RabbitMQ (3)
Elasticsearch (1)
redis (2)
Raspberry (4)
Padrao de design (4)
JQuery (1)
angularjs (4)
Dicas (43)
Kubernetes (3)
vscode (2)
backup (1)
angular (3)
servers (2)
pipelines (1)
AppSec (1)
DevSecOps (4)
rust (1)
RustLang (1)
Mozilla (1)
algoritimo (1)
sqlite (1)
Passport (2)
jwt (5)
security (2)
translate (1)
kube (2)
iot (1)
politica (2)
bolsonaro (1)
flow (1)
podcast (1)
Brasil (1)
containers (3)
traefik (1)
networking (1)
host (1)
POO (2)
microservices (2)
bug (1)
cqrs (1)
arquitetura (3)
Architecture (4)
sail (3)
militar (1)
artigo (1)
economia (1)
forcas armadas (1)
ffaa (1)
autenticacao (2)
autorizacao (2)
authentication (4)
authorization (3)
NoCookies (1)
wsl (4)
memcached (1)
macos (2)
unix (2)
kali-linux (1)
linux-tools (5)
apple (1)
noticias (2)
composer (1)
rancher (1)
k8s (1)
escopos (1)
orm (1)
jenkins (4)
github (5)
gitlab (3)
queue (1)
Passwordless (1)
sonarqube (1)
phpswoole (1)
laraveloctane (1)
Swoole (1)
Swoole (1)
octane (1)
Structurizr (1)
Diagramas (1)
c4 (1)
c4-models (1)
compactar (1)
compression (1)
messaging (1)
restfull (1)
eventdrive (1)
services (1)
http (1)
Monolith (1)
microservice (1)
historia (1)
educacao (1)
cavalotroia (1)
OOD (0)
odd (1)
chatgpt (1)
openai (3)
vicuna (1)
llama (1)
gpt (1)
transformers (1)
pytorch (1)
tensorflow (1)
akitando (1)
ia (1)
nvidia (1)
agi (1)
guard (1)
multiple_authen (2)
rpi (1)
auth (1)
auth (1)
livros (2)
ElonMusk (2)
Oh My Zsh (1)
Manjaro (1)
BigLinux (2)
ArchLinux (1)
Migration (1)
Error (1)
Monitor (1)
Filament (1)
LaravelFilament (1)
replication (1)
phpfpm (1)
cache (1)
vpn (1)
l2tp (1)
zorin-os (1)
optimization (1)
scheduling (1)
monitoring (2)
linkedin (1)
community (1)
inteligencia-artificial (2)
wsl2 (1)
maps (1)
API_KEY_GOOGLE_MAPS (1)
repmgr (1)
altadisponibilidade (1)
banco (1)
modelagemdedados (1)
inteligenciadedados (4)
governancadedados (1)
bancodedados (2)
Observability (1)
picpay (1)
ecommerce (1)
Curisidades (1)
Samurai (1)
KubeCon (1)
GitOps (1)
Axios (1)
Fetch (1)
Deepin (1)
vue (4)
nuxt (1)
PKCE (1)
Oauth2 (2)
webhook (1)
TypeScript (1)
tailwind (1)
gource (2)