10
votes

Yii :: app () -> user-> Isguest retourne toujours vrai même si la connexion a réussi

J'ai commencé à faire des différences entre les utilisateurs qui ont authentifié et ceux qui non. Pour cela, j'utilise xxx pré>

Toutefois, dans une vue déterminée, j'ai placé le code suivant: p> xxx pré>

et je reçois toujours le " Bienvenue invité! ", si je me suis connecté (avec succès) ou non. Et si je ai i> connecté, il affiche le message de bienvenue avec l'ID de l'utilisateur! P>

EDIT STRY> P>

@BRIOC .lv Hey .. Désolé pour la réponse tardive, j'espère que vous suivez toujours cela! Je n'extrave pas la classe d'identifiant donnée. Est-ce obligatoire? Étant donné que je ne comprends toujours pas très bien la question de l'autorisation, je pensais qu'il serait préférable de donner un essai avec la classe qu'ils fournissent, puis s'étendent avec ma propre fonctionnalité. Quoi qu'il en soit, ensuite, je pose ma classe de l'identifiant avec ses petits modifications. . Peut-être que le problème réside ici ?? p> xxx pré>

} p>

Voici la sortie que j'ai obtenue lorsque j'ai commencé à me connecter comme vous l'avez suggéré; J'ai reçu cette sortie immédiatement après la connexion avec succès. P>

[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 
)


4 commentaires

salut! Je suis toujours ici :) Cleae Ajouter un script de journalisation de l'utilisateur qui comprend une ligne similaire à $ identité = nouvel utilisateur ($ US Nom, $ mot de passe); et comment gérer la connexion


Oftopic: Dans l'occasion, n'utilisez pas Windowall . Utilisez trouver au lieu de cela, car vous voulez trouver une seule personne. Et vous pouvez utiliser $ utilisateur varibale comme objet modèle $ utilisateur-> id au lieu de $ utilisateur [0] -> id


Avez-vous déjà réussi à résoudre ce problème?


Ce problème m'est arrivé parce que des sessions n'étaient pas sauvegardées correctement sur le côté PHP des choses, pas à cause de quelque chose dans Yii.


8 Réponses :


7
votes

Peut-être que vous pouvez essayer de déboguer plus fort: Changez de messages à quelque chose comme ceci: xxx

et vérifier la variable de session dans votre fichier config / main.php xxx


5 commentaires

Je viens d'essayer ça, mais cela ne fonctionnait pas. Cependant, ce paramètre n'est-il pas par défaut de défaut? Il s'agit de la partie pertinente-iven, de mon fichier de configuration: 'composants' => tableau ("utilisateur '=> array (// activer l'authentification basée sur les cookies" allecautologin' => vrai,), "session" => Array ('AutoStart' => True,), J'ai très peu d'expérience avec l'authentification Web, donc je suis désemparé à l'endroit où le problème pourrait être. Merci à votre aide, toute autre suggestion ou code Snippet qui pourrait révéler le problème? Merci!


Ha. Pourquoi tant de programmeurs PHP pensent-ils que le débogage est d'imprimer des variables. Ne serait-il pas plus logique d'utiliser Netbeans et un véritable débogueur? Vous pouvez même regarder le code exécuter en temps réel et définir un point de pause pour l'arrêter. Génie!


@k au z Eh bien, autant que j'aimerais faire que type de débogage, lorsque j'ai commencé avec ce cadre (il y a un mois), j'ai dédié quelques-uns jours d'essayer de comprendre comment déboguer et ne pouvait pas. Depuis que je ne pouvais pas me permettre de perdre plus de temps, je me suis tourné vers la voie à l'ancienne ... Placer des commandes imprimées () à peu près n'importe où! Bien que l'on puisse débattre de combien de temps im gagnant réellement ... je n'ai toujours pas pu résoudre ce problème, il me rend fou !!


@k au z (et @sph ) yii avez le débogage Buil-in: yii :: journal (...) (recherchez-la avec weblogoute ). Mais sur l'autorisation. Essayez d'ajouter le débogage à votre classe de votre utilisateur (si vous y étendez). Et vérifiez peut-être que vous détruisez une session quelque part?


Dans la configuration de votre Authmanager, vérifiez si les défaultroles contiennent des invités. Les rôles par défaut seront attribués à tous les utilisateurs à chaque fois enregistré ou non.



1
votes

Lorsque vous appelez l'utilisateur d'authentifier la fonction Connexion utilisateur sous la forme

echo 'id='.Yii::app()->user->getId();


0 commentaires

0
votes

Tout d'abord, vous devez connaître l'état qui définit l'utilisateur et l'utilisateur connecté à part.

basé sur la branche de la maîtrise Yii CWebuser :: getisguest () : xxx

comparé à votre code: xxx

}

en bref: vous avez fourni "ID" à l'état d'identité Etat persistant, mais yii CWebuser s'attendant à "__ID" basé sur l'identifiant :: getid ( ).

solution est assez morte simple. Il vous suffit de définir ceci -> _ id xxx

}

cette routine explique comment CWebuser obtient l'identifiant de l'identifiant: https://github.com/yiisoft/yiii/blob/master/framework/web /auth/cwebuser.php#l221

veuillez le tester.


1 commentaires

comme une note latérale. CUT -> _ ID ou quel que soit le nom de la variable d'instance peut être utilisé aussi longtemps qu'il est renvoyé par useidentity :: getid ()



0
votes

S'il vous plaît essayer le code suivant. Son bien fonctionnel xxx


0 commentaires

4
votes

L'erreur est dans la ligne suivante

$this->_id = $user[0]->id;


0 commentaires

1
votes

J'ai rencontré le même problème et j'ai constaté qu'une seule ligne dans le composant de l'utilisateurs résolvait ce problème.

Ceci est votre code: P>

else 
{
    $this->_id = $user[0]->id;   
    $this->setState('id', $user[0]->id);            
    $this->username = $user[0]->username;
    $this->errorCode=self::ERROR_NONE;
    return true;
}


0 commentaires

0
votes

Vérifiez votre configuration de sécurité pour les cookies et les sessions. Désactiver session.on_only_cookies & session.cookie_httparly à php.ini Fichier.


0 commentaires

0
votes

dans php.ini => session.use_only_cookies = 0


1 commentaires

Bienvenue à Stackoverflow! Cela améliorerait beaucoup votre réponse si vous pouviez expliquer un peu comment cela résout le problème.