Bonjour !
je suis actuellement en train de développer un petit site avec CakePHP 2 (premier avec la V2, sinon troisième) et j'ai un soucis avec le composant Auth...
Avec la V1, c'etait facile de le configurer, de changer les champs qu'on utilisait pour la connexion mais là j'ai essayé tout plein de techniques et je suis à court.
Lors de l'inscription, avant, le mot de passe était crypté tout seul et là plus rien, bien que je dises à cake que le champ de mot de passe s'appelle 'pass' et non 'password' (idem pour 'username' => 'pseudo') donc j'ai suivi le tuto de GA sur la gestion de membre, ok l'inscription c'est réglé bien que ca ne soit pas comme avant.
Là où ca se corce, c'est à la connexion, le mot de passe n'est pas crypté du tout ! alors qu'avant, il me suffisait de faire le formulaire de connexion, de dire à cake où se trouve l'action pour la connexion et bim c'etait réglé... mais là je ne comprends pas
j'ai essayé tout ce qui était possible je crois pour configurer le composant (y compris renommer mes champs en BD et donc avoir une configuration "par defaut") mais rien y fait...
quelqu'un pourrait il me venir en aide parce que là ca devient tendu de faire un site sans authentification ^^
merci
Bon alors on a eu une petite discution sur l'irc, on a réglé le problème, je donne les explications :
La méthode de connexion a changé depuis la V1.3 ainsi que la méthode d'enregistrement des mots de passe.
Tout d'abord, le champ identifié comme celui du mot de passe (password par défaut) n'est plus crypté automatiquement, il faut, dans le beforeSave du modèle qui gère les utilisateurs ajouter ces deux lignes :
// User est le modèle des gens qu'on cherche à connecter
if (!empty($this->data'User']'password']))
$this->data'User']'password'] = AuthComponent::password($this->data'User']'password']);
Ensuite, lors de la connexion, cela n'est plus fait automatiquement non plus, tout comme pour l'enregistrement, le mot de passe n'est pas crypté tout seul (et ca ne sert à rien de le faire, je donne donc la fonction login minimale :
public function login()
{
if ($this->Auth->login())
{
$this->Session->setFlash('Vous vous êtes bien connecté');
$this->redirect('/'); // On peut changer le lieu de redirection bien sur !
}
else
$this->Session->setFlash('Erreur de mot de passe ou de pseudo');
}
Enfin, pour tester si la personne est connectée, il y a deux choix :
if ($this->Auth->user('id'))
// on est connecté
// ou bien (méthode non encore testée pour ma part)
if (AuthComponent::logedIn())
// on est connecté