Desenvolvimento Web II Framework Laravel 5 Autenticação / Auth (https://laravel.com/docs/5.6/authentication) Gil Eduardo de Andrade
Introdução: O Laravel fornece, nativo, uma API de autenticação que permite registrar, autenticar, autorizar e recuperar senhas de usuários; Ao criarmos uma nova aplicação Laravel é disponibilizada uma migração create_users_table e um modelo User;
Introdução: O Laravel disponibiliza, ainda, um conjunto de rotas e visualizações (views) que permitem incorporar facilmente um sistema de autenticação a aplicação criada; Para adicionar esses recursos ao projeto basta executar o comando: php artisan make:auth;
Primeiros Passos: (Arquivo:.env ) Configuração para conexão da aplicação com o banco de dados permite efetuar a migração das tabelas de usuário e recuperação de senha. Configuração para envio de e-mails a partir da aplicação permite enviar o e-mail de recuperação de senha para o usuário.
Comando migrate (tabelas): Cria as tabelas de usuário e recuperação de senha necessárias para utilização da API de autenticação do Laravel.
Comando make:auth (Views e Controllers): Classes de visualização criadas após a execução do comando. Permitem registrar, autenticar e recuperar senha do usuário. Classes de controle criadas após a execução do comando.
Comando make:auth (Rotas): Após a execução do comando as rotas para páginas de visualização de registro, autenticação e recuperação de senha são adicionadas ao arquivo de rotas da aplicação web.php. Uma rota protegida por autenticação é definida, ela considera uma página inicial definida como home.
Funcionamento/Adaptação (exemplo básico): (Arquivo: web.php ) Configura a rota principal / para redirecionar para view home, criada quando executamos o comando php artisan make:auth. Duas formas diferentes de especificar que as rotas necessitam de autenticação. Na primeira abordagem especificamos apenas uma única rota, na segunda especificamos um grupo ou conjunto de rotas.
Funcionamento/Adaptação (exemplo básico): (Execução: 127.0.0.1:8000 rota /login Arquivo: auth/login.php ) Ao acessar a rota principal ( / ) da aplicação, que foi configurada ser acessível após autenticação do usuário, o Laravel redireciona o acesso para rota /login. Essa view é disponibilizada pela API Auth e foi criada quando executamos o comando make:auth.
Funcionamento/Adaptação (exemplo básico): (Execução: rota /register Arquivo: auth/register.php ) Ao selecionar a opção Register na view de login a aplicação é redirecionada para view de registro. Os dados informados pelo usuário são inseridos na tabela users criada anteriormente (slide 5) quando efetuamos a migração via comando php artisan migrate.
Funcionamento/Adaptação (exemplo básico): (Execução: rota /password/reset Arquivo: auth/password/reset.php ) Ao selecionar a opção Forgot Your Password?, na view de login, a aplicação é redirecionada para view de reset. Nela o usuário digita seu e- mail onde receberá um link para efetuar a troca da senha. Caso o e- mail não esteja cadastrado no sistema, tabela users, uma notificação de erro é apresentada.
Aplicação Exemplo Adaptada http://www.gileduardo.com.br/ifpr/dwii/downloads/dwii_exdoc12.zip
SETA Menu e Rotas Principais: (Adaptação: Exemplo Primeira Aula Laravel - Views API Autenticação)
SETA Adaptação Migration User: (Arquivo: 2014_10_12_000000_create_users_table.php) Foram adicionados, para o exemplo criado, o campo type: que permite identificar se o usuário registrado é um aluno (0) ou professor (1) - e o campo cpf: identificar a professor ou aluno o usuário registrado está viculado.
SETA Models / Migrations Aluno e Professor: (Arquivos: create_aluno_models_table.php / create_professor_models_table.php ) Duas classes de modelo e migrations foram criadas para armazenar as informações dos alunos e professores, no exemplo, para simplificar colocamos para a informação de CPF que permite vincular o aluno e o professor a um usuário (autenticação) registrado no sitema.
SETA Definição Rotas: Autenticação (Rotas Com Autenticação Arquivo web.php ) Define as rotas que só estarão acessíveis após a autenticação do usuário. São elas: a rota inicial, menu principal, e todos os sub-menus acessíveis a partir dela: Curso, Turma, Aluno, Disciplina, Conceito, Relatório, Importar e Exporta.
SETA Definição Rotas: Autenticação (Rotas Sem Autenticação Arquivo web.php ) Define as rotas que estarão acessíveis sem a necessidade de autenticação do usuário. São elas: todas as rotas pré-definidas pela API de autenticação login, logout, registro e recuperação de senha. A rota de logout foi redefinida para apontar para a tela de login. Observe que utilizamos a API Auth para indicar que usuário efetuou logout.
SETA Adaptação da API de Autenticação: (Acesso e Redirecionamento: login.blade.php) Tela de login, API de autenticação, após adaptação.
SETA Adaptação da API de Autenticação: (Acesso e Redirecionamento: login.blade.php) Além das adaptações estéticas na página de login, as mensagens de erro retornadas pela API de autenticação foram reescritas e apresentadas de maneira diferente.
SETA Adaptação da API de Autenticação: (Acesso e Redirecionamento: login.blade.php) Adaptação das mensagens de erro enviadas pela API.
SETA Adaptação da API de Autenticação: (Acesso e Redirecionamento: register.blade.php) Tela de registro, API de autenticação, após adaptação. Observe que no exemplo foram adicionados mais informações para o registro dos usuários. Como temos dois tipos de usuários também são solicitados os campos CPF e usuário. O tipo permitirá que implementemos níveis de privilégio.
SETA Adaptação da API de Autenticação: (Acesso e Redirecionamento: register.blade.php) Além das adaptações estéticas na página de registro, as mensagens de erro retornadas pela API de autenticação foram reescritas e apresentadas de maneira diferente. Observe que mesmo o CPF não sendo padrão da API também foi codificada uma verificação para ele, como apresentado na codificação do slide a seguir.
SETA Adaptação da API de Autenticação: (Adaptação: RegisterController.php) O método validator() da classe RegisterController, responsável por registrar novos usuários, permite especificar como os campos de entrada do formulário de registro devem ser validados. Observe que o campo CPF deve ser obrigatório (required), do tipo string, com um mínimo e um máxiom de 11 caracteres (min:11 max:11) e campo único na tabela aluno_models (unique) criada para receber os dados específicos dos alunos.
SETA Adaptação da API de Autenticação: (Acesso e Redirecionamento: register.blade.php) Adaptação das mensagens de erro enviadas pela API.
SETA Adaptação da API de Autenticação: (Arquivo: RegisterController.php) O método create() da classe RegisterController() é invocado no momento em que um usuário é registrado/criado. Adaptando a API: uma verificação sobre qual tipo de usuário será registrado é feita ele é adicionando a respectiva tabela. Um novo usuário é registrado. Obs.: a codificação apresentada é apenas um exemplo e pode ser melhorada.
SETA Adaptação Super Classe Controller: (Arquivo: Controller.php) A classe Auth contém as informações globais de autenticação (dados de sessão), permitindo verificar o campo type para o usuário que está autenticado no sistema. Um novo método foi criado para retornar o tipo de usuário (aluno ou professor) que está autenticado no sistema no momento. Esse método é invocado pelas subclasses de controle que recebem requisições para acessar as rotas definidas no arquivo web.php. De acordo com o tipo de usuário é possível definir privilégios, ou seja, quais rotas podem ser acessadas pelos alunos e quais podem ser acessadas pelos professores.
SETA Definição Privilégio, Sub Classes Controle: (Arquivos: CursoController.php e TurmaController) Quando a rota principal (listar) para os menus Curso e Turma são invocados, antes que a aplicação faça o redirecionamento, uma verificação é feita para identificar o tipo de usuário. Pelo exemplo, apenas os professores tem privilégio para visualizar os menus a partir da página inicial.
SETA Pós Registro/Autenticação: (Acesso e Redirecionamento: main.blade.php) Após a autenticação o menu principal da aplicação é liberada para acesso (tanto para alunos quanto para professores). Na parte superior da view são apresentados o nome do usuário autenticado e a opção sair/logout.
SETA Pós Registro/Autenticação: (Adaptação: principal.blade.php) A classe Auth contém as informações globais de autenticação (dados de sessão) e permite verificar se o usuário já efetuou ou não login na aplicação método check(). Na codificação o nome do usuário e a opção sair só são apresentadas caso o usuário esteja autenticado. Através da classe Auth é possível acessar os dados do usuário autenticado como, por exemplo, seunome atributo name.
Exemplos Utilizados no Documento http://www.gileduardo.com.br/ifpr/dwii/downloads/dwii_exdoc12.zip Exercício sobre o Conteúdo http://www.gileduardo.com.br/ifpr/dwii/downloads/dwii_pratica11.pdf