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