Yii Framework Forum: Authentification question - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Authentification question Rate Topic: -----

#1 User is offline   jpj 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 58
  • Joined: 27-October 10

Posted 23 November 2010 - 04:33 AM

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,
0

#2 User is offline   yiimann 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 102
  • Joined: 19-December 09

Posted 29 November 2010 - 02:23 PM

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

#3 User is offline   jpj 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 58
  • Joined: 27-October 10

Posted 29 November 2010 - 02:30 PM

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...
0

#4 User is offline   yiimann 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 102
  • Joined: 19-December 09

Posted 01 December 2010 - 11:03 AM

View Postjpj, on 29 November 2010 - 02:30 PM, said:

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.
0

#5 User is offline   jpj 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 58
  • Joined: 27-October 10

Posted 02 December 2010 - 04:19 AM

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.
0

#6 User is offline   yiimann 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 102
  • Joined: 19-December 09

Posted 05 December 2010 - 08:45 AM

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

#7 User is offline   jpj 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 58
  • Joined: 27-October 10

Posted 06 December 2010 - 02:38 AM

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.
0

#8 User is offline   jpj 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 58
  • Joined: 27-October 10

Posted 06 December 2010 - 08:10 AM

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.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users