Autenticação de usuário para área administrativa
Nesta segunda parte da unidade D vamos mostrar como construir um mecanismo de autenticação de usuário para acesso a área administrativa.
Controle de acesso
O processo de autenticação de usuário para acesso a área administrativa é extremamente importante, uma vez que não podemos deixar esta área do site vulnerável para acesso de usuários sem permissão. Imagine qualquer usuário tendo acesso aos recursos de incluir, alterar e excluir dados da base de dados do site. Por isso, é importante que somente usuários registrados tenham acesso. Inicialmente o usuário deve informar seu login e senha em uma tela com mostra a figura D.26.
Após informar login e senha válidos, o usuário tem acesso a área administrativa (como a figura D.27). Em cada acesso de página da área administrativa é verificado se o usuário se autenticou. Veja na figura que foi mostrada uma saudação ao usuário: “Olá Daniel!”. Isso porque o login do usuário que está logado fica na sessão.
Agora vamos ver passo a passo o que precisamos para fazer a autenticação do usuário e controlar a sessão para a área administrativa.
Tabela usuários
Primeiro precisamos ter no nosso banco de dados (curso) uma tabela para registrar os usuários que tem acesso a área administrativa. O script abaixo deve ser usado para criar a tabela usuarios.
CREATE TABLE usuarios ( |
A tabela contém apenas três campos, sendo o login a chave primária. Além disso, temos o nome do usuário e a senha. Note que o campo senha foi criado com tamanho 35, isso porque a senha será criptografada.
No exemplo que vamos usar, todos os usuário vão possuir o mesmo tipo de acesso. Mas existem sistemas que podem necessitar de níveis diferentes de acesso. Neste caso deverá ser projetada uma estrutura diferente, de forma a identificar qual o nível de acesso do usuário.
Não vamos criar a manutenção de usuários neste material, pois nosso objetivo agora é fazer a autenticação do usuário. Por isso, para incluir dados na tabela crie um arquivo nomeado de inserir_usuario.php. A figura D.28 mostra o código do inserir_usuario.php.
Só precisamos chamar a atenção de uma função usada neste código. É a função md5 da linha 5. A função md5 faz a criptografia do valor passado por parâmetro usando um algoritmo unidirecional, isto significa que não existe o processo de descriptografar. Veremos depois como vamos testar a senha. A função gera uma string de 32 caracteres.
Ao executar o inserir_usuario.php será criado um usuário com os seguintes dados:
Login = root
Nome = Adminstrador
Senha = e8d95a51f3af4a3b134bf6bb680a213a
| ||||
| ||||
|
| ||||
| ||||
|
Tela Login
Para tela de login crie o arquivo login.php na pasta admin (c\xampp\htdocs\siteBD\admin). O código da tela de login é mostrado na figura D.29. A parte de código apresentada está no elemento body. Destaque para:
- no action do form (linha 18)chama index.php, que a página inicial da área administrativa. Como o botão Entrar é do tipo submit, quando for acionado chamará o index.php;
- o campo senha é do tipo password.
Controle de acesso
Agora que já temos uma tabela usuarios e a tela de login, vamos fazer o controle de acesso a área administrativa. Este controle será feito pelo arquivo controle_acesso.php. Importante: para controlar se o usuário está logado vamos criar uma variável na sessão chamada ses_usu_login que conterá o login do usuário. A figura D.30 mostra o código completo do controle_acesso.php. Vamos analisá-lo:
Linha 2 – inicia a sessão;
Linha 3 – verifica se tem a variável ses_usu_login na sessão, se não possuir entra neste if ;
Linha 5 – para verificar se veio da tela de login, testa se existe e se há um valor para login no array $_REQUEST[], se existir entra neste IF;
Linha 6 – atribui a senha que recebeu da tela de login para a variável $senha, já criptografando. Por que a criptografia? Porque a senha do banco está criptografada e não há mecanismo para reverter. Por isso, vamos testar as duas criptografadas;
Linhas 7 e 8 – monta o SQL para consultar no banco se existe usuário com o login e senha informados;
Linha 9 – executa o SQL e atribui o resultado para $rs;
Linhas 11 e 12 – Verifica novamente (pode não ter retornado registro) se o registro retornado possui o login igual ao informado. Se true cria a variável ses_usu_login na sessão atribuindo o login.
Linhas 14 até 16 – Se não encontrar usuário no banco, faz include do arquivo que mostra mensagem de login inválido (logininvalido.php) e executa a função exit (pára a execução);
Linhas 19 até 21 – Se não veio da tela de login, faz include do arquivo que mostra mensagem de acesso negado (acessonegado.php) e executa a função exit (pára a execução);
Linha 24 – entra no else se possuir na sessão a variável ses_usu_login
Linhas 25 até 29 – Se a variável da sessão não possuir valor, ou seja não tem um login, retira a variável da sessão, faz include do arquivo que mostra mensagem de acesso negado (acessonegado.php) e executa a função exit (pára a execução);
Agora resta saber como vamos usar o controle_acesso.php. Ele servirá para controlar o acesso a todas as páginas da área administrativa. Por isso, no início de cada arquivo, que é chamado diretamente, faremos um include do controle_acesso.php (index.php, cidades.php, alunos.php). O include do controle_acesso.php será sempre após o include do conexao.php, pois ele precisa da conexão com o banco de dados.
Veja como fica no index.php (figura D.31). Na linha 19 mostra uma saudação ao usuário logado.
| ||||
| ||||
|
A figura D.32 mostra como fica o arquivo cidades.php com o include do controle_acesso.php. O include foi feito na linha 3.
Após a inclusão do controle_acesso.php nos arquivos, vamos fazer um teste. Antes de tentar fazer o login, tente acessar diretamente o index.php: http://localhost/admin/index.php.
Se tudo estiver certo, deverá mostrar a mensagem “Acesso Negado!”. Isso ocorre porque o controle_acesso.php verificou que não tem usuário na logado na sessão. Faça outros testes agora e veja o que acontece:
- acesse também diretamente http://localhost/admin/cidades.php
- na tela de login informe usuário e senha inválidos
- faça login e agora tente acessar http://localhost/admin/cidades.php
Logout
Para sair da área administrativa pode ser criado o arquivo logout.php com o código para destruir a sessão. O código do logout.php é mostrado na figura D.33.
Síntese
Esta parte da Unidade D mostrou como fazer a autenticação de usuário para acesso à área administrativa e como usar sessão para este controle. Agora é com você! Faça a atividade proposta e anote todas as suas dúvidas para posteriormente discutir tais questões no fórum. Bom trabalho!