2009-06-06 4 views
2

Je suis en train de construire la page d'inscription de connexion pour mon site, je suis confronté à des problèmes avec lui auth Component,Pourquoi le nom d'utilisateur et le mot de passe du composant Auth Auth ne fonctionnent-ils pas comme prévu dans CakePHP?

function beforeFilter() { 
    $this->Auth->loginAction = array('controller'=>'users','action'=>'login'); 
    $this->Auth->loginRedirect = array('controller'=>'users','action'=>'landing'); 
    $this->Auth->logoutRedirect = array('controller'=>'users','action'=>'home'); 

    // These pages do not require authenication<br/> 
    $this->Auth->allow('home','register','activate','forgot','reset','_sendEmail','reset'); 
} 

Je CHIFFREMENT et le stockage des mots de passe dans la base de données en utilisant la méthode $this->Auth->password, maintenant, même lorsque je me connecte en succès je donT redirigés vers la page de destination sous contrôleur utilisateurs, j'ai essayé imprimer $this->Auth et il dit

[loginError] => Login failed. Invalid username or password. 
[authError] => You are not authorized to access that location. 

également dans ma base de données les domaines contre lesquels j'utilise l'authentification sont e-mail et mot de passe, j'ai lu quelque part que l'AuthComponent nécessite les champs t o être nom d'utilisateur et mot de passe pour l'automagic au travail

Je ne peux pas comprendre ce que je fais mal, même après la connexion, si j'essaie de pointer mon navigateur à http://cake.localhost/users/register il devrait automatiquement me rediriger vers la page d'atterrissage, mais il doesnt pour certaines raisons.

Des indices quant à l'endroit où je me trompe?

Shiv

+0

Puis-je suppose que cela est en app_controller.php? Avez-vous accidentellement ajouté ce contrôleur comme acos pour l'autorisation? Ensuite, vous devrez peut-être vous assurer que tous les groupes d'utilisateurs sont autorisés à afficher ce message. – codingbear

+0

C'est à l'intérieur UsersController – Shiv

+0

loginAction/loginRedirect/logoutRedirect doit être à l'intérieur beforeFilter() de app_controller .. au moins, c'est ce que j'ai trouvé comme une meilleure conception – codingbear

Répondre

-1

Si vous utilisez CakePHP 1.2, vous devez changer:

$this->Auth->allow('home','register','activate','forgot','reset','_sendEmail','reset'); 

à

$this->Auth->allow(array('home','register','activate','forgot','reset','_sendEmail','reset')); 

Avis l'ajout "array()" dans la fonction permettent.

+0

oups désolé pour cela, mais il n'a toujours pas résolu mon problème – Shiv

+1

êtes-vous y compris var $ components = array ('Auth')? En outre, j'ai trouvé cet article pour être une bonne solution pour ne pas utiliser ACL: http://www.studiocanaria.com/articles/cakephp_auth_component_users_groups_permissions_revisited – Jefe

+0

intéressant ... Je vais regarder à travers cet article, et oui j'ai mis la variable de composant – Shiv

1

Essayez $ this-> Auth-> allowedActions = array ('*'); dans le beforeFilter() du contrôleur (pas dans app_controller).

3

Du livre de cuisine CakePHP:

Par défaut, le AuthComponent attend d'avoir une table appelée « utilisateurs » avec des champs appelés « nom d'utilisateur » et « mot de passe » à utiliser.

Je me demande si l'automagic fonctionnera si vous utilisez email comme nom de champ?

Essayez d'ajouter ceci à votre beforeFilter:

function beforeFilter() { 
    $this->Auth->fields = array(
     'username' => 'email', 
     'password' => 'password' 
    ); 
} 
+0

Je l'avais déjà mis dans – Shiv

+0

m'a aidé. THX. – zgnilec

0

La façon dont je résolu ce problème, ce qui est vraiment un hack est que je renomme le champ de formulaire à password2, puis Iin ma méthode de commande je mis

 

$this->data['password] = $this->data['password2] 
 

Alors j'ai appelé

 

$this->Auth->login($this->data) 
 

et il semblait travailler. Je ne pense pas que c'est la meilleure façon, mais cela a fonctionné et je vais aller avec jusqu'à ce que je trouve une meilleure solution.

+0

Avez-vous crypté manuellement $ this-> data ['password'] avant l'appel avant d'appeler $ this-> Auth-> login()? Si c'est le cas, le problème vient du fait que la méthode de connexion effectue également le chiffrement du mot de passe, et s'attend donc à ce qu'il soit fourni en clair. –

0

Dans votre app_controller.php

function beforeFilter() { 
    $this->Auth->fields = array('username' => 'email', 'password' => 'password'); 
    $this->Auth->loginAction = array('controller'=>'users','action'=>'login'); 
    $this->Auth->loginRedirect = array('controller'=>'users','action'=>'landing'); 
    $this->Auth->logoutRedirect = array('controller'=>'users','action'=>'home'); 
} 

Dans votre contrôleur utilisateurs:

function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow(list of your allowed actions); 
}