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