Authentification question

Bonjour,

un problème de gestion des sessions m’a amené à voir que pour l’authentification, authenticate() de la classe UserIdentity est appelée 2 fois quand on s’authentifie.

Je ne vois pas pourquoi elle est appelée pour valider le mot de passe, ce qui est fait par la méthode login().

tout fonctionne très bien quand je supprime la règle qui appelle authenticate() pour valider le mot de passe, et au passage je n’ai plus mon problème de gestion de session.

public function authenticate($attribute,$params)

{

$this->_identity=new UserIdentity($this->username,$this->password);

if(!$this->_identity->authenticate())

$this->addError(‘password’,‘Incorrect username or password.’);

}

Merci,

Est-ce que UserIdentity est bien dans components et qu’il n’y a pas d’autre dans des modules ?

Oui il est dans components. De toute façon ça se teste assez facilement, c’est dans le pack téléchargeable, dans le dossier démos, en prenant le blog par exemple.

Ce que je ne pige pas est dans le modèle LoginForm, je ne vois pas pourquoi il y a cette règle :

array(‘password’, ‘authenticate’),

qui fait que la validation du mot de passe se fait avec la méthode authenticate, plus bas, qui fait ceci:

public function authenticate($attribute,$params)

{


	$this->_identity=new UserIdentity($this->username,$this->password);


	if(!$this->_identity->authenticate())


		$this->addError('password','Incorrect username or password.');


}

Pour moi ce n’est pas le traitement que j’attendrais, qui devrait plutôt valider le format du mot de passe, au lieu de carrément vérifier toute l’authentification, ce qui devrait être fait si tous les tests de validation sont OK.

Mais j’ai peut-être loupé quelque chose…

Parce que on ne juge pas la peine de verifier le format du user et password, il suffit juste de l’autentifier et de le connecter. Admettons que tu change tes rules dans le Model User, tu devras ensuite ne pas oublier de modifier les rules de LoginForm, ce qui peut augmenter les erreurs de développement.

Néanmois cela peut être utile si tu décide d’utiliser une adresse email comme username, dans ce cas on ajoute une rule email et l’utilisateur sera averti du format en cas d’erreur, mais ca ne reste pas indispensable et nécessaire à tout pris.

Dans ce cas pour moi il faut supprimer cette règle de validation qui fait en réalité l’authentification puisque de toute façon le même traitement est fait dans la méthode LoginForm::login(), appelée en validant le formulaire d’authentification.

En regardant les logs on voit que le traitement génère quelques requêtes et ça me semble complètement inutile de le faire 2 fois.

Il faut que je me remette dedans mais je me demande si ça ne m’a pas posé un souci dans la gestion des sessions.

Oui tu as raison, c’est pas normal. A voir si ce n’est pas indispensable.

Oui c’est curieux. En fait je crois que ça m’ouvrait 2 sessions, une sur l’appel ajax pour la validation du mot de passe (à la saisie du mot de passe), puis à nouveau lors de la validation du formulaire.

J’ai posté sur le forum en anglais mais pas de réponse…je vais essayer à nouveau.

J’ai reposté sur le forum classique et je me suis fait engueulé par un admin tout sauf aimable. Pas de quoi me donner envie de poster sur ce forum à nouveau.