Você está na página 1de 11

Gil Eduardo de Andrade

TECNÓLOGO: ANÁLISE E DESENVOLVIMENTO DE SISTEMAS


Disciplina de Desenvolvimento Web II
Framework Laravel: Autenticação Multiusuário

https://laravel.com/docs/6.x
(código-fonte dos exemplos)

Autenticação Multiusuário
→ Instalando Bootstrap
[Como visto na aula de Views]

Comando: composer require laravel/ui


Comando: php artisan ui bootstrap
Comando: npm install && npm run dev

→ Instalando Middleware Auth


[Como visto na aula de Autenticação]
Comando: php artisan ui:auth

→ Criando Migration/Tabela para Autenticação Administrador

Comando: php artisan make:migration create_admins_table --create=admins


Arquivo Criado: “/database/migrations/ 2020_04_11_192835_create_admins_table.php”

Figura 01: Criando Migration/Tabela para autenticação do Administrador.

Arquivo Alterado: “/database/migrations/ 2020_04_11_192835_create_admins_table.php”

INSTITUTO FEDERAL DO PARANÁ | Paranaguá


Rua Antônio Carlos Rodrigues, 453 - Porto Seguro, Paranaguá - PR | 83215-750 – Brasil (1/11)
Gil Eduardo de Andrade

Os campos “name”, “email”


e “password” foram
adicionados a migration.

Figura 02: Configurando a migration do administrador.

Comando: php artisan migrate

Figura 03: Comando de Migração – Tabela “admins”.

Figura 04: Tabela “admins” criada no banco de dados.

→ Criando a Model do Administrador

Ação: copiar a classe de modelo User.php, colar e renomear para Admin.php.


Ação: mudar o nome da classe de User para Admin.

Altera o nome da classe de


modelo para “Admin”.

Figura 05: Classe de Modelo “Admin” que foi criada.

INSTITUTO FEDERAL DO PARANÁ | Paranaguá


Rua Antônio Carlos Rodrigues, 453 - Porto Seguro, Paranaguá - PR | 83215-750 – Brasil (2/11)
Gil Eduardo de Andrade

→ Adicionando Suporte a Autenticação Admin

Arquivo Alterado: “/config/auth.php”

Uma nova entrada “admin” foi criada no


array “guards”. Os guards são os tipos de
autenticação disponibilizados pelo Laravel. O
“guard web” é o padrão, utilizado na aula
anterior para tabela users. Já o “guard api” é
utilizado para autenticação de outras
aplicações e plataformas.

Figura 06: Adicionando o guard “admin” – novo tipo de autenticação.

Uma nova entrada “admins” foi criada no


array “providers”. O array providers indica
qual driver e qual classe de modelo serão
utilizados para obter os dados de
autenticação do banco.

Figura 07: Adicionando o provider “admins” – Indica o driver e a model utilizados para autenticar o admin.

Uma nova entrada “admins” foi criada no


array “passwords”. O array passwords
possibilita configurar alguns parâmetros do
procedimento de recuperação de senha.

Figura 08: Adicionando nova entrada no array “passwords” – recuperação de senha.

Obs.: O array default possui os dados que serão utilizados caso, no momento da
autenticação, não seja indicado o tipo de autenticação que está sendo usada e

INSTITUTO FEDERAL DO PARANÁ | Paranaguá


Rua Antônio Carlos Rodrigues, 453 - Porto Seguro, Paranaguá - PR | 83215-750 – Brasil (3/11)
Gil Eduardo de Andrade

qual a tabela onde estão armazenados os dados de login e senha para validação. O
campo “guards” indica que, caso não seja passado um parâmetro indicando o tipo
de autenticação que deve ser utilizada, a web será adotada como padrão. Já o
campo "passwords" indica que, caso não seja passado um parâmetro indicando o
tipo de autenticação que deve ser utilizada, os dados de autenticação (login e
senha) estão armazenadas na tabela "users".

→ Criando as Controllers e Views do Administrador

Arquivo Alterado: “/app/Admin.php”

Adiciona o atributo “$guard”


indicando o “admin” como
responsável pela autenticação.
Figura 09: Definindo o “guard” responsável pela autenticação do administrador.

Ação: copiar a view home.blade.php, colar e renomear para home-admin.blade.php.


Ação: personalizar a view “admin” para ficar diferente da view “home”.
Coloca apenas a mensagem
“Administrador” no conteúdo,
para diferenciar da view home.
Figura 10: Definindo o “guard” responsável pela autenticação do administrador.

Comando: php artisan make:controller AdminController


Arquivo Criado: “/app/Http/Controllers/AdminController.php”

Figura 11: Criando o controlador responsável pela autenticação do administrador.

INSTITUTO FEDERAL DO PARANÁ | Paranaguá


Rua Antônio Carlos Rodrigues, 453 - Porto Seguro, Paranaguá - PR | 83215-750 – Brasil (4/11)
Gil Eduardo de Andrade

Arquivo Alterado: “/app/Http/Controllers/AdminController.php”

Insere o método construtor.


Nele configura o middleware
“auth” com o parâmetro /
guard “admin”.
Figura 12: Configura o middleware “auth” com o guard “admin” para “AdminController”.

Obs.: Como visto na aula de Middleware, ao configurarmos o middleware “auth”,


passando como parâmetro o guard “admin”, estamos indicando que todos os
acessos as rotas controladas pela classe “AdminController” passarão pelo
middleware “auth”.

Figura 13: Adiciona o método “índex()” que invoca a view “home-admin.blade.php”.

Arquivo Alterado: “/route/web.php”

Figura 14: Adiciona a rota para acesso a home do administrador.

→ Criando um novo Fluxo de Autenticação - Administrador

Comando: php artisan make:controller Auth/AdminLoginController

Figura 15: Criando o controlador responsável pela ação de “login” do administrador.

INSTITUTO FEDERAL DO PARANÁ | Paranaguá


Rua Antônio Carlos Rodrigues, 453 - Porto Seguro, Paranaguá - PR | 83215-750 – Brasil (5/11)
Gil Eduardo de Andrade

Arquivo Alterado: “/app/Http/Controllers/Auth/AdminLoginController.php”

Aplica o middleware
“guest”, que permite
acesso as rotas tratadas
pela classe de Controle. Método que faz a verificação
dos dados. Retorna “true”,
inicialmente, para testarmos,
indica autenticação válida.

Método invocado quando o


administrador quer efetuar “login”.

Figura 16: Adiciona os métodos responsáveis pela ação de “login” do administrador.

Ação: copiar a view login.blade.php, colar e renomear para login-admin.blade.php.


Ação: personalizar a view “login-admin” para ficar diferente da view “home”.

Obs.: a personalização, aqui, fica a cargo do aluno. Efetue as alterações que achar
necessário.

Arquivo Alterado: “/resources/views/auth/login-admin.blade.php”

Rota de autenticação do administrador,


definida no arquivo “web.php”.

Figura 17: Alterando a rota para submissão do formulário de “login” – administrador.

INSTITUTO FEDERAL DO PARANÁ | Paranaguá


Rua Antônio Carlos Rodrigues, 453 - Porto Seguro, Paranaguá - PR | 83215-750 – Brasil (6/11)
Gil Eduardo de Andrade

→ Testando a Codificação Inicial para Autenticação do Administrador

Insira um e-mail qualquer


e uma senha qualquer
com no mínimo 8 dígitos.

Figura 18: Acesso a rota “/admin/login” – Tela de autenticação do administrador.

A mensagem “true” é
apresentada como
codificado no método
“login()” da classe
“AdminLoginController” Figura 19: Após autenticação a mensagem “true” é apresentada.

→ Implementando a Verificação dos Dados de Autenticação

Arquivo Alterado: “/app/Http/Controllers/Auth/AdminLoginController.php”

Valida o formato dos dados de entrada.

Monta o array de credenciais, com e-mail e


senha, para efetuar a autenticação.

Define o guard “admin” e utiliza o método


“attempt()” para autenticar o usuário.

Se “$status” = “true”, autenticação


Se “$status” = “false”, correta, redirecionando o usuário
redireciona o usuário para para “home-admin”.
o “login” novamente.

INSTITUTO FEDERAL DO PARANÁ | Paranaguá


Rua Antônio Carlos Rodrigues, 453 - Porto Seguro, Paranaguá - PR | 83215-750 – Brasil (7/11)
Gil Eduardo de Andrade

Figura 20: Método de Autenticação “login()” – classe “AdminLoginController”.

→ Acertando os Redirecionamentos via Configuração de Exceção

Obs.: a classe “/vendor/.../Illuminate/Auth/Middleware/Authenticate.php" trata


os eventos de autenticação e seus respectivos redirecionamentos. Ela gera as
exceções quando a autenticação não é possível. Considerando que os arquivos
armazenados na pasta vendor não devem ser alterados (a pasta vendor nem
mesmo é enviada para o github e afins quando subimos um projeto), vamos
utilizar o arquivo que permite capturar as exceções geradas e assim tratá-las para
acertar os redirecionamentos. Arquivo: "/app/Exceptions/Handler.php".

Arquivo Alterado: “/app/Exceptions /Handler.php”


Adiciona a classe para captura da exceção.

Adiciona o método que permite capturar as


exceções geradas quando o usuário tenta
acessar uma rota vinculada ao middleware
“auth:admin” e não está autenticado.

Utiliza o parâmetro “$exception” para


identificar qual “guard” está vinculado à
exceção gerada. Dependendo do “guard”
redireciona para tela de “login” correta.

Figura 21: Capturando as exceções de autenticação e acertando o redirecionamento.

Obs.: agora vamos acertar o redirecionamento após a autenticação do


administrador. Esse evento de redirecionamento é tratado na classe
"/app/Http/Middleware/RedirectIfAuthenticated.php". Para tal, vamos verificar
dentro do método "handle()" quem está autenticado no momento,
"administrador" ou “usuário”. Sendo o administrador vamos redirecionar para
“home-admin”.

INSTITUTO FEDERAL DO PARANÁ | Paranaguá


Rua Antônio Carlos Rodrigues, 453 - Porto Seguro, Paranaguá - PR | 83215-750 – Brasil (8/11)
Gil Eduardo de Andrade

Identificar qual “guard” está vinculado


à requisição efetuada, definindo o
redirecionamento que será efetuado.

Figura 22: Acertando o redirecionamento “pós-login” de acordo com o tipo de usuário.

Obs.: agora vamos acertar o redirecionamento após o administrador efetuar


“logout”, para que o mesmo seja redirecionado para tela de “login” do
administrador.

Arquivo Alterado: “/routes/web.php”

Figura 23: Cria uma nova rota para o “logout” do administrador.

Arquivo Alterado: “/app/Http/Controllers/Auth/AdminLoginController.php”

Os métodos utilizados nas Cria o método “logout()”.


linhas 38 e 39 são os Utiliza os métodos que
mesmos utilizados para permitem encerrar e limpar
“logout” na classe os dados de sessão
“AuthenticatesUsers” – vinculados ao usuário
copiar e colar. autenticado.
Figura 24: Cria e codifica o método “logout” da classe “AdminLoginController”.

INSTITUTO FEDERAL DO PARANÁ | Paranaguá


Rua Antônio Carlos Rodrigues, 453 - Porto Seguro, Paranaguá - PR | 83215-750 – Brasil (9/11)
Gil Eduardo de Andrade

Arquivo Alterado: “/resurces/views/templates/default-login.blade.php”

Rotas Alteradas.

Figura 25: Modificando a rota de “logout” na view “template-login” do administrador.

→ Registrando um Administrador via Tinker – Testando Autenticação

Comando: php artisan tinker

Figura 26: Criando um usuário “administrador” via Tinker.

Figura 27: Tabela “admins” com os dados do novo “administrador”.

Comando: php artisan serve –port 15000


Link: “127.0.0.1:15000/admin/login”

INSTITUTO FEDERAL DO PARANÁ | Paranaguá


Rua Antônio Carlos Rodrigues, 453 - Porto Seguro, Paranaguá - PR | 83215-750 – Brasil (10/11)
Gil Eduardo de Andrade

Figura 25: Efetuando a autenticação do novo administrador cadastrado.

Figura 26: Autenticação efetuada com sucesso – Home do Administrador.

INSTITUTO FEDERAL DO PARANÁ | Paranaguá


Rua Antônio Carlos Rodrigues, 453 - Porto Seguro, Paranaguá - PR | 83215-750 – Brasil (11/11)

Você também pode gostar