Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

chamuska

Autenticação no AppControler não funciona no cake 2.1.x

Recommended Posts

PEssoal, no cake 1.3 eu sempre consigo fazer autenticação de usuarios no app_controller usando o Auth, mas estou testando no cake 2.1 e não estou conseguindo.

 

Quando eu tento acessar as página, em vez dele direcionar para o controller usuarios ele direciona para o controller users, parece que ele não está pegando o valor setado em 'userModel'.

 

Não sei o que está errado, segue o codigo do AppController:

class AppController extends Controller {

public $components = array(
	'Session',
	'Auth' => array(
		'fields' => array('password' => 'senha', 'username' => 'email'),
		'userModel' => array('usuarios'),
		'loginRedirect' => array('controller' => 'usuarios', 'action' => 'index'),
		'logoutRedirect' => array('controller' => 'usuarios', 'action' => 'index'),
		'authError' => 'Você não tem acesso a página',
		'authorize' => array('Controller')
	)
);

public function isAuthorized($user)
{
	return true;
}

public function beforeFilter(){
	$this->Auth->allow('index','view');
}

}

 

Pelo menos ele não autentica para os index e view dos CRUDs, como foi definido!

 

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muita coisa mudou no cakephp da versão 1.3 para 2.1

Leia este tópico do manual do cake em pt-br Autenticação simples e Autorização da Aplicação

E caso tenha duvida sobre configuração do componete leia este em en AuthComponent

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muita coisa mudou no cakephp da versão 1.3 para 2.1

Leia este tópico do manual do cake em pt-br Autenticação simples e Autorização da Aplicação

E caso tenha duvida sobre configuração do componete leia este em en AuthComponent

 

Então cara, esse material em PT usa o padrão que é a tabela users com os campos username e password, e eu preciso que o login no meu sistema funcione com a tabela usuarios e com os campos email e senha. Eu sempre consegui faze isso com o cakephp 1.3 e quero fazer com o cakephp 2.x.

 

Do material em ingles eu tentei mas ainda não consegui faze funciona, to tentando aqui!

Preciso de ajuda pra faze esse negocio funciona pois é pra um sistema do meu tcc, se eu não consegui faze funciona o login com o cake 2 vou ter que usar o 1.3.

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente isso amigo:

 

 

	public $components = array(
	'Session', 
	    'Auth' => array(
	        'loginAction' => array(
	            'controller' => 'usuarios',
	            'action' => 'login',
	        ),
	        'authError' => 'É necessário logar para acessar está area',
	        'authenticate' => array(
	            'Form' => array(
			'userModel'=>'Usuario'
	            )
	        )
	    )
	);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente isso amigo:

 

 

	public $components = array(
	'Session', 
	    'Auth' => array(
	        'loginAction' => array(
	            'controller' => 'usuarios',
	            'action' => 'login',
	        ),
	        'authError' => 'É necessário logar para acessar está area',
	        'authenticate' => array(
	            'Form' => array(
			'userModel'=>'Usuario'
	            )
	        )
	    )
	);

 

 

Deu certo pra carrega a pagina de login!

Mas quando executo o form da pagina ele recarrega a pagina e parece que não executa nenhuma query, pois aquela tabela na parte de baixo da pagina que mostra as consultas não mostra nenhuma consulta, provavelmente não executa nada no bd pra autenticar o usuario.

 

Então as minhas duvidas são:

- Como fazer para autenticar o usuario no banco e exibir a consulta ?

- Como posso fazer para que ele criptografe a senha em MD5 ?

 

Como o codigo que você me passo deu certo, eu alterei o AppController pra fica assim:

<?php
/**
* Application level Controller
*
* This file is application-wide controller file. You can put all
* application-wide controller-related methods here.
*
* PHP 5
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @copyright     Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link          http://cakephp.org CakePHP(tm) Project
* @package       app.Controller
* @since         CakePHP(tm) v 0.2.9
* @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
*/

App::uses('Controller', 'Controller');

/**
* Application Controller
*
* Add your application-wide methods in the class below, your controllers
* will inherit them.
*
* @package       app.Controller
* @link http://book.cakephp.org/2.0/en/controllers.html#the-app-controller
*/
class AppController extends Controller {


public $components = array('Session', 'Security', 'Auth');

public function beforeFilter(){


	$this->Auth->loginAction = array('controller' => 'usuarios', 'action' => 'login');
	$this->Auth->authError = 'É necessário logar para acessar está area';
	$this->Auth->authenticate = array('Form' => array('userModel'=>'Usuario'));
	$this->Auth->fields = array('password' => 'senha', 'username' => 'email');
	$this->Auth->loginRedirect = array('controller' => 'usuario', 'action' => 'index');

	$this->Auth->allow('index','view');

}

}

 

A pagina de login fico assim:

<h2>EFETUE LOGIN!</h2>
<?php
echo $this->Session->flash('auth'); // Exibimos qualquer erro que possa ter ocorrido
echo $this->Form->create('Usuario' , array('action' => 'login'));
echo $this->Form->input('email');
echo $this->Form->input('senha', array('type'=>'password'));
echo $this->Form->end('LOGAR');
?>

 

E na UsuariosController, na função login() fico assim:

public function login(){
	if($this->request->is('POST'))
	{
		if($this->Auth->login())
		{
			$this->redirect($this->Auth->redirect());
		}
		else {
			$this->Session->setFlash('Usuario ou senha está incorreta.');
		}
	}
}

 

O codigo dessa função login eu peguei num video do youtube!

 

Como posso resolver esses problemas de validação de usuario ??

Precisam de mais algum codigo ?!

 

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

para exibir as queries realizadas no banco é necessário que você adicione um "element" ao seu layout.

 

#No layout insira isto.

echo $this->element('sql_dump'); 

 

 

 

#Para criptografar sua semha utilize o callback beforeSave

public function beforeSave($options = array()) {
       $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
       return true;
   }

 

#Altere

$this->Auth->authenticate = array('Form' => array('userModel'=>'Usuario'));
$this->Auth->fields = array('password' => 'senha', 'username' => 'email');

 

#Por isto

$this->Auth->authenticate = array('Form'=>array('userModel'=>'Usuario','fields'=>array('username'=>'email','password'=>'senha')));

e tente novamente.

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

para exibir as queries realizadas no banco é necessário que você adicione um "element" ao seu layout.

 

#No layout insira isto.

echo $this->element('sql_dump'); 

 

 

 

#Para criptografar sua semha utilize o callback beforeSave

public function beforeSave($options = array()) {
       $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
       return true;
   }

 

#Altere

$this->Auth->authenticate = array('Form' => array('userModel'=>'Usuario'));
$this->Auth->fields = array('password' => 'senha', 'username' => 'email');

 

#Por isto

$this->Auth->authenticate = array('Form'=>array('userModel'=>'Usuario','fields'=>array('username'=>'email','password'=>'senha')));

e tente novamente.

 

abraços

 

Fiz a alteração no $this->Auth->authenticate e apareceu na tela o echo da consulta!!

 

Mas a alteração no beforeSave não deu certo, ele não esta sendo executado na Model Usuario :(

O que pode ser ??

 

To meio perdido no cake 2.x.

 

 

 

Valeu1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está alterando os dados a sua necessidade?

 

 

#Essa função é chamada antes do model persistir os dados no banco.

public function beforeSave($options = array()) {
       $this->data['Usuario']['senha'] = AuthComponent::password($this->data['Usuario']['senha']);
       return true;
   }

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está alterando os dados a sua necessidade?

 

 

#Essa função é chamada antes do model persistir os dados no banco.

public function beforeSave($options = array()) {
       $this->data['Usuario']['senha'] = AuthComponent::password($this->data['Usuario']['senha']);
       return true;
   }

 

abraços

 

Preciso alterar o valor da senha para criptografar em MD5, por isso preciso dessa função. Estou estranhando isso não funcionar, pois pelo que pesquisei ele deve funcionar só de colocar na Model.

 

Não sei se é isso que você tinha perguntado, mas é pra isso que preciso da função!

 

Valeu!

 

Você está alterando os dados a sua necessidade?

 

 

#Essa função é chamada antes do model persistir os dados no banco.

public function beforeSave($options = array()) {
       $this->data['Usuario']['senha'] = AuthComponent::password($this->data['Usuario']['senha']);
       return true;
   }

 

abraços

 

Preciso alterar o valor da senha para criptografar em MD5, por isso preciso dessa função. Estou estranhando isso não funcionar, pois pelo que pesquisei ele deve funcionar só de colocar na Model.

 

Não sei se é isso que você tinha perguntado, mas é pra isso que preciso da função!

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dei uma olhada nos meus codigos feitos usando cake 1.3 e vi que na Model Usuario eu usei a função hashPasswords.

 

function hashPasswords($data)
{
	if (isset($data['Usuario']['senha'])) {
		$data['Usuario']['senha'] = md5($data['Usuario']['senha']);
		return $data;
	}
	return $data;
}

 

Procurei pra faze ela no cake 2 mas não achei ainda um exemplo.

 

Alguem ai sabe como posso fazer no cake 2 ???

 

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Você está falando da parte de validação de usuários ou de criptografia de senha ?!

 

Valida acesso de usuário eu não curti muito usando ACL e to usando só o Auth por enquanto, mas pretendo estudar e testar melhor o ACL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezados,

 

Tento a dias utilizar o novo componente Auth do cakephp 2.x porém sem sucesso, ao tentar personalizar os campos no model Cliente para utilizar o cpf como login, a consulta não é executada no bd, o sql_dump não mostra nada, no entanto ao usar os campos padrões a consulta é efetuada com sucesso.

 

Segue abaixo trecho do código

 

Cakephp 2.1.3

 

AppController

 

 

<?php

App::uses('Controller', 'Controller');

class AppController extends Controller {

public $helpers = array('Html','Time','Form','Session');
public $paginate = array('limit' => 5);
public $components = array('Session','Security','Auth');

function beforeFilter() {

}
}

?>

 

 

ClientesController / beforeFilter

 

 

public function beforeFilter() {

parent::beforeFilter();

$this->Auth->authenticate = array(
							'Form' => array(
										'userModel' => 'Cliente',
										'fields' => array('username' => 'cpf'), // quando o campo username ou password é modificado a consulta não é executada
										'scope' => array('Cliente.ativo' => true)
										)
							);

$this->Auth->loginAction = array('controller' => 'clientes', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'clientes', 'action' => 'balance');

// $this->Auth->allow('*');
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente você não está enviando o campo cpf no post.

Talvez você tenha esquecido de mudar na view.

 

<?php
echo $this->Form->inputs(array(
'legend' => __('Login'),
'cpf',
'password' => array('value' => false)
));
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.