Seguindo alguns tutoriais na net, e lendo o arquivo OCPHP.pdf q baixei no 
cakephp.org, consegui entender um pouco mais aqui de autenticação com Auth 
component.

Estou fazendo uns testes aqui, mas acho q conseguirei dividir a proteção das 
páginas em 3 níveis, o público(todos acessam), usuario(apenas registrados) e 
admin.
Isto usando o parâmetro Admin do arquivo core.php.

Se der td certo aqui posto um tutorial pra galera.

abraços

>
> 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 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 :
>>
>>
>> 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:
>>
>> 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:
>>
>>
>>
>> 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:
>>
>> // faça aqui sua página de gerencia de conta do usuário (troca de
>> senhas, etc..)
>>
>> ?>
>>
>> ----------------------
>>
>> users/login.ctp:
>>
>>
Log In:
>>
>>
>> create('User', array('action'=>'login')));?>
>>                input('username');?>
>>                input('password',
>> array('value'=>''));?>
>>
>>
>> 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 cake-php-pt-
> [EMAIL PROTECTED] Para mais opções, visite este grupo em
> http://groups.google.com/group/cake-php-pt?hl=pt-PT -~----------~---
> -~----~----~------~----~------~--~---

--~--~---------~--~----~------------~-------~--~----~
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