Parabéns!! Ótima iniciativa, cara!
Eu era um dos caras que apanhava pro Auth, agora já me esclareceu um
pouco a vida. hehe


Abraços,

Juan Basso

On 26 jan, 09:05, Defranco <[EMAIL PROTECTED]> wrote:
> Oi Pessoal,
>
> Em primeiro lugar peço desculpas pela demora - eu não estava
> monitorando o tópico, mas agora vou ficar mais atento.
>
> O auth está funcionando no meu novo site (ACL não, somente Auth), mas
> existem algumas coisas que eu não testei como criar um usuário
> (registro) e outras não implementadas ainda totalmente como multi-
> nível (admin/user) - mas são pequenos detalhes.
>
> Estou usando o cake 1.2 Beta (cake_1.2.0.6311-beta) que já possui o
> Auth (acho que no 1.1 você tem que adicionar ele separadamente) -
> assim este exemplo foi testado somente com o 1.2
>
> Primeiro vamos à criação das tabelas:
>
> CREATE TABLE `users` (
>   `id` int(10) NOT NULL AUTO_INCREMENT,
>   `username` varchar(250) NOT NULL DEFAULT '',
>   `password` varchar(50) NOT NULL,
>   `group_id` smallint(6) NOT NULL,
>   `name` varchar(255) DEFAULT NULL,
>   `email` varchar(250) NOT NULL DEFAULT '',
>   `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
>   `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
>   `status` int(11) DEFAULT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
>
> ----------------------
>
> CREATE TABLE `groups` (
>   `id` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
>   `name` varchar(50) DEFAULT NULL,
>   `description` text,
>   `parent_id` int(11) NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
>
> ----------------------
>
> sobre a tabela users acima, você pode mais tarde usar o email como
> username se preferir e remover o campo username (mas não modifique
> nada agora, faça ele funcionar primeiro).
>
> Na verdade meu exemplo não usa ainda a tabela groups.
>
> user.php :
>
> <?php
> class User extends AppModel {
> var $name = 'User';
> var $validate = array(
> 'username' => VALID_NOT_EMPTY,
> 'password' => VALID_NOT_EMPTY
> );
> function beforeSave() {
> if ($this->data['User']['password']) {
> $this->data['User']['password'] = md5($this->data['User']
> ['password']);}
> return true;
> }
> }
>
> ?>
>
> ----------------------
>
> Eu estou usando md5 para as senhas no banco, mas eu não testei ainda
> esta rotina (copiei ela de um tutorial) que transforma em md5 antes de
> armazenar a senha.
>
> Agora modifique o seu app_controller.php para que o auth esteja
> opcionalmente disponível em todos controllers (você escolhe quais
> necessitam autenticação ou não adicionando-se o componente Auth):
>
> app_controller.php:
> <?php
> class AppController extends Controller {
>
>         function beforeFilter() {
>                 $this->_performAuth();
>         } //function beforeFilter()
>
>         function isAuthorized() {
>                 if (isset($this->params[Configure::read('Routing.admin')])) {
>                         if ($this->Auth->user('admin') == 0) {
>                                 return false;
>                         }
>                 }
>         return true;
>         }//isAuthorized
>
>         function _performAuth()
>         {
>                 // se o controller possui o componente Auth,
>                   // então é necessário autenticação para ter acesso à ele.
>                 if (isset($this->Auth)) {
>                         Security::setHash("md5");
>
>                         //se você preferir email como nome do usuário, use: 
> 'username' =>
> 'email' (não testei)
>                         $this->Auth->fields = array('username' => 'username', 
> 'password' =>
> 'password');
>                         $this->Auth->loginAction = array('controller' => 
> 'users', 'action'
> => 'login');
>
>                         //Se preferir que redirecione para uma página em 
> específico sempre
> após o login (eu prefiro comentado pois redireciona para a página
> anterior ao login)
>                         //$this->Auth->loginRedirect = array('controller' => 
> 'users',
> 'action' => 'myaccount');
>
>                         //se preferir que redirecione para uma página 
> específica após o
> logout:
>                         //$this->Auth->logoutRedirect = '/';
>
>                         //mensagem flash em caso de erro de login (Não está 
> funcionando
> comigo)
>                         $this->Auth->loginError = 'Invalid e-mail / password 
> combination.
> Please try again';
>                         $this->Auth->authorize = 'controller';
>                 }
>         } //function _performAuth()
>
> }
>
> ?>
>
> ----------------------
>
> users_controller.php:
>
> <?php
>
> class UsersController extends AppController
> {
>     var $name = 'Users';
>     var $layout = 'management';
>         var $uses = array(      'User',
>                                         );
>
>     var $components = array('Auth', 'Session');
>
>     var $helpers = array('Html', 'Form', 'Session'
>
>                                                 );
>
>         var $publicControllers = array('pages');
>
>     function index(){
>
>     } //index
>
>         //em qualquer controller que você adicionar o Auth, você pode
> especificar Actions que os usuários tenham acesso sem necessidade de
> autenticar. Neste caso /users/getAuthUser
>         function beforeFilter(){
>                 $this->Auth->allow('getAuthUser');
>
>                 parent::beforeFilter();
>         }
>
>         function login() {
>
>                 if ($this->Auth->user()) {
>
>                         if (!empty($this->data)) {
>                                 if 
> (empty($this->data['User']['remember_me'])) {
>                                         $this->Cookie->del('User');
>                                 } else {
>                                         $cookie = array();
>                                         $cookie['username'] = 
> $this->data['User']['email'];
>                                         $cookie['token'] = 
> $this->data['User']['password'];
>                                         $this->Cookie->write('User', $cookie, 
> true, '+2 weeks');
>                                 }
>                                 unset($this->data['User']['remember_me']);
>                         }
>                         $this->redirect($this->Auth->redirect());
>                 }
>         }//login()
>
>         function logout() {
>         $this->log("users_controller.php: logout()", LOG_DEBUG);
>         $this->layout = 'default';
>         $url_logout = $this->Auth->logout();
>         $this->Session->setFlash('You\'ve successfully logged out.');
>         $this->redirect($url_logout);
>     }
>
>     function myaccount()
>     {
>         //TODO
>
>         //set('',);
>         //return
>
>     }
>
>         //esta ação pode ser chamada de qualquer controller para verificar
> qual usuário está logado.
>     function getAuthUser(){
>         if ($this->isAuthorized())
>                 $user = $this->Auth->user();
>         else
>                 $user = null;
>         return $user;
>     }
>
> } // Class
>
> ?>
>
> ----------------------
>
> users/myaccount.ctp:
> <?php
> // faça aqui sua página de gerencia de conta do usuário (troca de
> senhas, etc..)
>
> ?>
>
> ----------------------
>
> users/login.ctp:
>
>  <h1>Log In:</h1>
> <?= isset($auth_msg) ? $auth_msg: ''?>
>
> <?php e($form->create('User', array('action'=>'login')));?>
>                 <?php echo $form->input('username');?>
>                 <?php echo $form->input('password',
> array('value'=>''));?>
>
> <div class="submit"><input type="submit" value="Login" /></div>
> <?php echo $form->end();?>
>
> ----------------------
>
> Agora você pode incluir o auth no seu controller bastando incluir o
> componente Auth:
>
>  var $components = array ( 'Auth');
>
>  Voce pode especificar actions (via requestAction por exemplo) deste
> controller que não necessitam autenticação (muito útil com o tempo)
>
> function beforeFilter(){
>         $this->Auth->allow('nome_action1', 'nome_action2');
>         parent::beforeFilter();
>
> }
>
> Eu tive dificuldades em adicionar meu próprio usuário na base de
> dados, como o Auth cria o md5 - para adicionar a senha do usuário, eu
> fiz um debug e verifiquei o hash que ele ia comparar com o db e
> adicionei este manualmente como senha.
>
> Como eu disse, ele não usa o ACL ainda ou faz qualquer diferenciação
> entre usuários (user/admin) mas acho que é fácil implementar.
>
> qualquer dúvida, agora estou monitorando o tópico - se achar erros no
> código ou em caso de sugestões, por favor poste aqui!
>
> Abraços
>
> Érico
--~--~---------~--~----~------------~-------~--~----~
Recebeu esta mensagem porque está inscrito em Grupo "Cake PHP Português" do 
Grupos Google.
 Para enviar mensagens para este grupo, envie um email para 
[email protected]
 Para anular a inscrição neste grupo, envie um email para [EMAIL PROTECTED]
 Para mais opções, visite este grupo em 
http://groups.google.com/group/cake-php-pt?hl=pt-PT
-~----------~----~----~----~------~----~------~--~---

Responder a