Yii :: app () - & gt; user- & gt; isGuest renvoie toujours la valeur true même si la connexion a réussi
J'ai commencé à faire quelques différences entre ces utilisateurs qui ont authentifié et ceux qui pas. Pour cela, je suis en utilisant
Yii::app()->user->id;
Cependant, dans une vue j'ai mis le code suivant:
<?php
if(Yii::app()->user->isGuest) {
print("Welcome back Guest!");
print("Your id is ".Yii::app()->user->id);
} else {
print("Welcome back ".Yii::app()->user->name);
print("Your id is ".Yii::app()->user->id);
}?>
Et j'ai toujours le bienvenue invité!", si je suis connecté (avec succès) ou pas. Et si je connecté, puis il affiche le message de bienvenue avec l'id de l'utilisateur!
MODIFIER
@briiC.lv
Hey.. désolé pour la réponse tardive, j'espère que vous êtes toujours en suivant cette! Je ne suis pas l'extension de la UserIdentity classe. Est-ce obligatoire? Depuis j'ai toujours ne soyez pas très bien l'ensemble de l'autorisation en question, j'ai pensé qu'il serait préférable de faire un essai avec la classe qu'ils fournissent, et puis l'étendre avec mes propres fonctionnalités.. de toute façon, la prochaine, je poste mon UserIdentity classe avec ses petits tweaks.. peut-être que le problème réside ici??
<?php class UserIdentity extends CUserIdentity{
private $_id;
public function authenticate()
{
$user = Users::model()->findAll('username=\''.$this->username.'\' AND password=\''.$this->encryptedPassword.'\'');
if(!isset($user[0]))
{
return false;
}
else
{
$this->setState('id', $user[0]->id);
$this->username = $user[0]->username;
$this->errorCode=self::ERROR_NONE;
return true;
}
}
public function getId()
{
return $this->_id;
}
}
Ici est le résultat que j'ai eu quand j'ai commencé à vous connecter comme vous l'avez suggéré, j'ai cette sortie immédiatement après le succès de la connexion.
[05:23:21.833][trace][vardump] CWebUser#1 (
[allowAutoLogin] => true
[guestName] => 'Guest'
[loginUrl] => array ( '0' => '/site/login' )
[identityCookie] => null
[authTimeout] => null
[autoRenewCookie] => false
[autoUpdateFlash] => true
[CWebUser:_keyPrefix] => '0f4431ceed8f17883650835e575b504b'
[CWebUser:_access] => array()
[behaviors] => array()
[CApplicationComponent:_initialized] => true
[CComponent:_e] => null
[CComponent:_m] => null
)
Toute aide est très appréciée!
source d'informationauteur Soph
Vous devez vous connecter pour publier un commentaire.
Peut-être que vous pouvez essayer de déboguer plus difficile:
les messages de changement à quelque chose comme ceci:
Et vérifier la variable de session dans votre config/main.php fichier
L'erreur est à la ligne suivante
Comme on le voit dans le officiel yii documentation concernant auth & auth
setState
doit être utilisé pour quoi que ce soit mais le champ id. Afin de mettre en œuvre les principaux Yii utilisera pour identifier l'utilisateur, de retour d'une valeur unique par utilisateur dans l'IdentitégetId()
fonction.Dans votre cas, cela signifie que vous suffit de modifier la ligne ci-dessus dans le texte suivant:
Quant à l'intérieur de la procédure de connexion, je recommande un regard sur les
CWebUser
classe, et en particulier à sa la fonction de loginqui est responsable pour le stockage de l'IdentitégetId()
valeur de retour.lorsque vous appelez la fonction authentification d'utilisateur de connexion comme
et de chercher de l'id comme
l'application du présent code et de vérifier
Que j'ai rencontré le même problème et a trouvé qu'une seule ligne dans UserIdentity Composante permettra de résoudre ce problème.
C'est votre code:
Mise à jour de ce code par celui-ci
Tout d'abord, vous devez savoir à condition que les ensembles d'hôtes et de l'utilisateur connecté à part.
Basé sur Yii maître de la branche CWebUser::getIsGuest():
Par rapport à votre code:
}
En bref: vous n'avez approvisionnement 'id' Identité persistante de l'état, mais Yii CWebUser s'attendre à "__id' sur la base de UserIdentity::getId().
Solution est assez simple. Vous avez juste besoin de mettre $this->_id
}
Cette routine explique comment CWebUser obtenir UserIdentity ID: https://github.com/yiisoft/yii/blob/master/framework/web/auth/CWebUser.php#L221
S'il vous plaît ne le teste.
vérifier votre configuration de sécurité pour les cookies et les sessions.
désactiver session.use_only_cookies & session.cookie_httponly en php.ini
fichier.
en PHP.INI => session.use_only_cookies = 0