Fala pessoal, tudo bom?
Hoje vou tentar explicar pra vocês como configurar o AuthComponent do CakePHP pra criar um sistema de login bem simples mas muito eficiente.
Na minha opinião, o maior problemas de usar o Auth em um sistema/aplicação em português é que seu Model de usuários vai se chamar “Usuario”, “Cliente” ou “Administrador” * e não “User”, então você precisa mudar algumas configurações pra ele [o Auth] funcione de acordo.
* Esses níveis de acesso não deveriam definir o nome do model, que ainda é apenas um usuário.
Tabela de usuários (clientes)
Se você já tem um model/tabela de usuários pode pular para o próximo passo. Se você ainda não tem, essa é uma estrutura que eu recomendo pra quem usar MySQL:
1 |
CREATE TABLE `clientes` ( |
2 |
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , |
3 |
`nome` VARCHAR ( 100 ) NOT NULL , |
4 |
`email` VARCHAR ( 150 ) NOT NULL , |
5 |
`senha` CHAR ( 40 ) NOT NULL , |
6 |
`ativo` BOOLEAN NOT NULL DEFAULT '0' , |
Habilitando o AuthComponent
Recomendo que você insira o componente no seu AppController pois toda a aplicação será controlada/protegida pelo AuthComponent.
Edite (ou crie) o arquivo /app/app_controller.php e defina os componentes que você quer usar, no final da lista coloque o Auth:
1 |
class AppController extends Controller { |
3 |
// Componentes utilizados por toda a aplicação |
4 |
public $components = array ( 'Session' , 'Cookie' , 'Auth' ); |
Agora começa a parte de configuração e comunicação com o seu model de usuários, administradores ou seja lá qual for o nome.
Configurando o AuthComponent
Ainda dentro do seu AppController você vai configurar o componente dentro de um método (callback) chamado beforeFilter, da seguinte maneira:
03 |
class AppController extends Controller { |
05 |
public $components = array ( 'Session' , 'Cookie' , 'Auth' ); |
07 |
public function beforeFilter() { |
10 |
$this ->Auth->userModel = 'Cliente' ; |
12 |
// Campos de usuário e senha |
13 |
$this ->Auth->fields = array ( |
14 |
'username' => 'email' , |
18 |
// Condição de usuário ativo/válido (opcional) |
19 |
$this ->Auth->userScope = array ( |
20 |
'Cliente.ativo' => true |
23 |
// Action da tela de login |
24 |
$this ->Auth->loginAction = array ( |
25 |
'controller' => 'clientes' , |
29 |
// Action da tela após o login (com sucesso) |
30 |
$this ->Auth->loginRedirect = array ( |
31 |
'controller' => 'clientes' , |
35 |
// Action para redirecionamento após o logout |
36 |
$this ->Auth->logoutRedirect = array ( |
37 |
'controller' => 'pages' , |
38 |
'action' => 'display' , 'home' |
42 |
$this ->Auth->loginError = __( 'Usuário e/ou senha incorreto(s)' , true); |
43 |
$this ->Auth->authError = __( 'Você precisa fazer login para acessar esta página' , true); |
Com essas configurações definidas o sistema de login está praticamente pronto! 
Criando as actions de login e logout
Para criar o formulário de login você precisa definir aquela action de login que você especificou ali em cima, na opção loginAction (linha 24), por exemplo:
Se o nosso model de usuários se chama Cliente, então nossas actions de login e logout estarão no controller de Clientes:
03 |
class ClientesController extends AppController { |
05 |
public function login() { } |
07 |
public function logout() { |
08 |
// Redireciona o usuário para o action do logoutRedirect |
09 |
$this ->redirect( $this ->Auth->logout()); |
A action de login fica vazia mesmo, e a action de logout apenas redireciona o visitante para a action definida lá no logoutRedirect (linha 36).
Fomulário de Login
A view do formulário de login é extremamente simples e (segundo o nosso exemplo) vai no arquivo /app/views/clientes/login.ctp:
1 |
<?php $this ->Session->flash( 'auth' ) ?> |
3 |
<?php $this ->Form->create( 'Cliente' , array ( 'action' => 'login' )) ?> |
4 |
<?php $this ->Form->input( 'email' ) ?> |
5 |
<?php $this ->Form->input( 'senha' , array ( 'type' => 'password' )) ?> |
6 |
<?php $this ->Form-> end ( 'Entrar' ) ?> |
Primeiro nós temos o Session->flash() que irá exibir as mensagens de erro de autenticação (senha inválida, página restrita e etc.)
Depois nós usamos o FormHelper para criar o formulário de login (apontando pra action de login) com os campos de email e senha! 
Criando seu primeiro usuário
Feito isso o seu sistema de login está pronto mas você precisa criar um usuário para testá-lo, e fazer isso direto no banco de dados não vai funcionar!
Quando você instalou o CakePHP ele deve ter pedido para você modificar a configuraçãoSecurity.salt, lá na linha 204 do arquivo /app/config/core.php, esse valor é utilizado na hora de encriptar a senha de um usuário antes de salvá-lo no banco de dados e consequentemente também é utilizado na hora de você fazer o login. Por isso é o CakePHP quem precisa criar esse usuário no banco de dados, não adianta tentar fazer isso diretamente no banco.
Para criar um usuário é bem simples: é só você fazer isso dentro de alguma action (de algum controller) do CakePHP, utilizando o método save() do seu model de usuários, por exemplo:
01 |
// Carrega o model de clientes |
02 |
$this ->loadModel( 'Cliente' ); |
04 |
// Cria um novo cliente |
05 |
$this ->Cliente->create(); |
06 |
$this ->Cliente->save( array ( |
07 |
'nome' => 'Thiago Belem' , |
08 |
'email' => 'contato@thiagobelem.net' , |
09 |
'senha' => $this ->Auth->password( '123456' ), |
Esse código pode ir dentro do método beforeFilter do seu AppController (após as instruções de configuração do AuthComponent… Mas execute esse código apenas uma vez! Cada vez que esse código for executado o CakePHP irá tentar criar um novo usuário. Execute, verifique no banco de dados se o usuário foi criado e delete o código.
Perceba que utilizamos o método Auth->password() que faz exatamente o que expliquei ali em cima, utiliza o Security.salt para encriptar a senha passada.
Protegendo apenas um prefixo (opcional)
Agora todo o seu sistema estará “bloqueado”, e você precisa fazer login para acessar qualquer tela.
Caso você queira proteger apenas um prefixo (como por exemplo: admin) e não exigir login enquanto o usuário não estiver acessando um action com esse prefixo, coloque o seguinte código após a configuração do AuthComponent:
1 |
if (!isset( $this ->params[ 'admin' ]) || ! $this ->params[ 'admin' ]) |
2 |
$this ->Auth->allow( '*' ); |
Isso fará com que o Auth permita acesso à qualquer action quando você não estiver dentro do um prefixo “admin”.
Você também precisará mudar algumas configurações do Auth:
01 |
// Action da tela de login |
02 |
$this ->Auth->loginAction = array ( |
04 |
'controller' => 'clientes' , |
08 |
// Action da tela após o login (com sucesso) |
09 |
$this ->Auth->loginRedirect = array ( |
11 |
'controller' => 'clientes' , |
15 |
// Action para redirecionamento após o logout |
16 |
$this ->Auth->logoutRedirect = array ( |
18 |
'controller' => 'pages' , |
19 |
'action' => 'display' , 'home' |
Essa mudança é necessária pois você precisa sair e entrar do prefixo “admin” antes e depois do login/logout.
Pronto! 
Parabéns, você acaba de fazer um sistema de login utilizando CakePHP! Onde o maior trabalho (na minha opinião) foi criar o usuário, pois configurar o AuthComponent e criar o formulário de login é extremamente simples.
Quer saber mais sobre o CakePHP?

Inscreva-se no meu curso online de CakePHP, o Assando Sites!
Você aprende sem sair de casa, aos domingos ou quando preferir assistir os vídeos gravados em aula. 
Para saber mais informações sobre o curso, acesse o site ou leiaeste post aqui no blog.
Um grande abraço e até a próxima!
Artigo originalmente publicado em 15 de agosto de 2011 por Thiago Belem: Sistema de login com CakePHP e AuthComponent
Gostei muito desse site!