Avançar para a área de conteúdo

ir para o conteúdo principal

developerWorks Brasil  >  Software livre  >

Crie Web sites rapidamente com CakePHP, Parte 2: Faça mais e melhor com CakePHP

developerWorks
Ir para a página anteriorPágina 2 de 14 Ir para a próxima página

Opções de documento

Código de amostra


Classificar este tutorial

Ajude-nos a melhorar este conteúdo


Tor, até o momento

No fim da Parte 1, você recebeu a oportunidade de usar suas habilidades para construir algumas funcionalidades faltantes no Tor. Login/Logout, índice, o uso de senhas em hash e fazer login e registrar automaticamente um usuário estavam na sua lista de deveres. Como você se saiu?

A visualização de login

Sua visualização de login talvez se pareça à Listagem 1.


Listagem 1. Visualização de login
                     
<?php
if (isset($error)) {
  echo('Invalid Login.');
}
?>
 
<p>Please log in.</p>
<?php echo $form->create('User', array('action' => 'login')); ?>

<?php
    echo $form->input('username');
    echo $form->input('password');
?>

<?php echo $form->end('Login');?>
<?php echo $html->link('Register', array('action' => 'register')); ?>
                

Sua visualização de índice talvez se pareça à Listagem 2.


Listagem 2. Visualização de índice
                    
<p>Hello, <?php echo($user['first_name'] . ' ' . $user['last_name']); ?></p>

<?php echo $html->link('knownusers', array('action' => 'knownusers')); ?>

<?php echo $html->link('logout', array('action' => 'logout')); ?>
                

Ambas as visualizações devem parecer bem simples. A visualização de índice verifica na sessão o nome de usuário e, se não houver, o envia para o login. A visualização de login não determina uma mensagem de erro específica, de modo que alguém que tente invadir o sistema por tentativa e erro não saberá que partes estão corretas.

Seu controlador talvez se pareça à Listagem 3.


Listagem 3. Controlador
                   
<?php

class UsersController extends AppController
{
    var $name = 'Users';
    var $helpers = array('Html', 'Form' );

    function register()
    {
if (!empty($this->data))
{
$this->data['User']['password'] = md5($this->data['User']['password']);
if ($this->User->save($this->data))
{
$this->Session->setFlash('Your registration information was accepted');
$this->Session->write('user', $this->data['User']['username']);
$this->redirect(array('action' => 'index'), null, true);
} else {
$this->data['User']['password'] = '';
$this->Session->setFlash('There was a problem saving this information');
}
}
    }

    function knownusers()
    {
$this->set('knownusers', $this->User->findAll(null,
 		array('id', 'username', 'first_name', 'last_name'), 'id DESC') ) ;
    }

    function login()
    {
if ($this->data)
{
$results = $this->User->findByUsername($this->data['User']
			 ['username']);
if ($results && $results['User']['password'] ==
 			      md5($this->data['User']
			 ['password']))
{
$this->Session->write('user', $this->data['User']['username']);
$this->redirect(array('action' => 'index'), null, true);
} else {
$this->set('error', true);
}
}
    }

    function logout()
    {
$this->Session->delete('user');
$this->redirect(array('action' => 'login'), null, true);
    }

    function index()
    {
$username = $this->Session->read('user');
if ($username)
{
$results = $this->User->findByUsername($username);
$this->set('user', $results['User']);
} else {
$this->redirect(array('action' => 'login'), null, true);
}
    }

}
?>

O uso de md5() para senhas em hash e a comparação dos seus valores em hash significa que você não precisa armazenar senhas em texto simples no banco de dados — desde que faça o hash das senhas antes de armazená-las. Quanto a usuários que você já tenha criado, você terá de atualizar suas senhas em texto simples com as versões MD5 delas: UPDATE users SET PASSWORD = md5( PASSWORD ) WHERE 1.

A ação logout não precisa de visualização. Só precisa limpar os valores que você coloca na sessão.

Não há problema se suas soluções não forem exatamente iguais a estas. Se você não conseguiu suas próprias soluções, atualize seu código usando o acima para ficar pronto para concluir o restante deste tutorial.



Voltar para parte superior



Ir para a página anteriorPágina 2 de 14 Ir para a próxima página