


Le framework Yii2 implémente les fonctions de connexion, de déconnexion et de connexion automatique
Cet article présente principalement la méthode du framework Yii2 pour implémenter les fonctions de connexion, de déconnexion et de connexion automatique. Il analyse en détail le principe, la méthode de mise en œuvre et les précautions de fonctionnement associées du framework Yii2 pour réaliser les fonctions de connexion, de déconnexion et de connexion automatique sous la forme. d'exemples. Amis dans le besoin Vous pouvez vous y référer, j'espère que cela pourra aider tout le monde.
L'exemple de cet article décrit comment le framework Yii2 implémente les fonctions de connexion, de déconnexion et de connexion automatique. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Le principe de la connexion automatique est très simple. Ceci est principalement réalisé en utilisant des cookies
Lors de la première connexion, si la connexion réussit et que la connexion automatique la prochaine fois est sélectionnée, les informations d'authentification de l'utilisateur seront enregistrées dans le cookie, ainsi que la période de validité du cookie. est de 1 ans ou mois.
La prochaine fois que vous vous connecterez, déterminez d'abord si les informations de l'utilisateur sont stockées dans le cookie. Si tel est le cas, utilisez les informations de l'utilisateur stockées dans le cookie pour vous connecter.
Configurer le composant utilisateur
Définissez d'abord le composant utilisateur dans les composants du fichier de configuration
'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ],
On voit enableAutoLogin Il est utilisé pour déterminer s'il faut activer la fonction de connexion automatique. Cela n'a rien à voir avec la prochaine connexion automatique sur l'interface.
Uniquement lorsque enableAutoLogin est vrai, si vous choisissez de vous connecter automatiquement la prochaine fois, les informations utilisateur seront stockées dans un cookie et la période de validité du cookie sera fixée à 3600* 24 * 30 secondes pour la prochaine connexion
Voyons maintenant comment cela est implémenté dans Yii.
1. Enregistrez les cookies lors de la première connexion
Fonction de connexion
<🎜. >public function login($identity, $duration = 0) { if ($this->beforeLogin($identity, false, $duration)) { $this->switchIdentity($identity, $duration); $id = $identity->getId(); $ip = Yii::$app->getRequest()->getUserIP(); Yii::info("User '$id' logged in from $ip with duration $duration.", __METHOD__); $this->afterLogin($identity, false, $duration); } return !$this->getIsGuest(); }
switchIdentity pour définir les informations d'authentification.
2. switchIdentity définit les informations d'authentification
public function switchIdentity($identity, $duration = 0) { $session = Yii::$app->getSession(); if (!YII_ENV_TEST) { $session->regenerateID(true); } $this->setIdentity($identity); $session->remove($this->idParam); $session->remove($this->authTimeoutParam); if ($identity instanceof IdentityInterface) { $session->set($this->idParam, $identity->getId()); if ($this->authTimeout !== null) { $session->set($this->authTimeoutParam, time() + $this->authTimeout); } if ($duration > 0 && $this->enableAutoLogin) { $this->sendIdentityCookie($identity, $duration); } } elseif ($this->enableAutoLogin) { Yii::$app->getResponse()->getCookies()->remove(new Cookie($this->identityCookie)); } }
$identity transmise à la sortie est nulle
protected function sendIdentityCookie($identity, $duration) { $cookie = new Cookie($this->identityCookie); $cookie->value = json_encode([ $identity->getId(), $identity->getAuthKey(), $duration, ]); $cookie->expire = time() + $duration; Yii::$app->getResponse()->getCookies()->add($cookie); }
$identity->getId()<p>$identity->getAuthKey()<code>$identity->getId()<br/>$identity->getAuthKey()<br/>$duration
$durationgetId() et getAuthKey() sont dans IdentityInterface dans l'interface. Nous savons également que lors de la configuration du composant User, le modèle utilisateur doit implémenter l'interface IdentityInterface. Par conséquent, vous pouvez obtenir les deux premières valeursdans le modèle utilisateur, et la troisième valeur est la durée de validité du cookie.
2. Connectez-vous automatiquement à partir des cookies
D'après ce qui précède, nous savons que les informations d'authentification de l'utilisateur ont été stockées dans le cookie, donc ensuite time Récupérez simplement les informations directement à partir du cookie et définissez-les.
1. Contrôle d'accès utilisateur AccessControl
Yii fournit AccessControl pour déterminer si l'utilisateur est connecté. Avec cela, il n'est pas nécessaire de juger à nouveau à chaque action
public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'only' => ['logout'], 'rules' => [ [ 'actions' => ['logout'], 'allow' => true, 'roles' => ['@'], ], ], ], ]; }
2. getIsGuest et getIdentity déterminent s'il faut authentifier l'utilisateur
isGuest est l'attribut le plus important dans la connexion automatique. processus.
Dans le contrôle d'accès AccessControl ci-dessus, utilisez l'attribut IsGuest pour déterminer s'il s'agit d'un utilisateur authentifié, puis appelez getIdentity dans la méthode getIsGuest Récupérez les informations de l'utilisateur. Si elle n'est pas vide, cela signifie que c'est un utilisateur authentifié, sinon c'est un visiteur (non connecté).
public function getIsGuest($checkSession = true) { return $this->getIdentity($checkSession) === null; } public function getIdentity($checkSession = true) { if ($this->_identity === false) { if ($checkSession) { $this->renewAuthStatus(); } else { return null; } } return $this->_identity; }
3. renouvelerAuthStatus régénère les informations d'authentification de l'utilisateur
protected function renewAuthStatus() { $session = Yii::$app->getSession(); $id = $session->getHasSessionId() || $session->getIsActive() ? $session->get($this->idParam) : null; if ($id === null) { $identity = null; } else { /** @var IdentityInterface $class */ $class = $this->identityClass; $identity = $class::findIdentity($id); } $this->setIdentity($identity); if ($this->authTimeout !== null && $identity !== null) { $expire = $session->get($this->authTimeoutParam); if ($expire !== null && $expire < time()) { $this->logout(false); } else { $session->set($this->authTimeoutParam, time() + $this->authTimeout); } } if ($this->enableAutoLogin) { if ($this->getIsGuest()) { $this->loginByCookie(); } elseif ($this->autoRenewCookie) { $this->renewIdentityCookie(); } } }
Ceci partie détermine d'abord l'utilisateur via la session, car l'utilisateur existe déjà dans la session après la connexion. Déterminez ensuite s'il s'agit d'une connexion automatique, puis connectez-vous via les informations du cookie.
4. Connectez-vous via les informations de cookie enregistrées loginByCookie
protected function loginByCookie() { $name = $this->identityCookie['name']; $value = Yii::$app->getRequest()->getCookies()->getValue($name); if ($value !== null) { $data = json_decode($value, true); if (count($data) === 3 && isset($data[0], $data[1], $data[2])) { list ($id, $authKey, $duration) = $data; /** @var IdentityInterface $class */ $class = $this->identityClass; $identity = $class::findIdentity($id); if ($identity !== null && $identity->validateAuthKey($authKey)) { if ($this->beforeLogin($identity, true, $duration)) { $this->switchIdentity($identity, $this->autoRenewCookie ? $duration : 0); $ip = Yii::$app->getRequest()->getUserIP(); Yii::info("User '$id' logged in from $ip via cookie.", __METHOD__); $this->afterLogin($identity, true, $duration); } } elseif ($identity !== null) { Yii::warning("Invalid auth key attempted for user '$id': $authKey", __METHOD__); } } } }
Lisez d'abord la valeur du cookie, puis $data = json_decode($value, true);
Désérialisez en tableau.
À partir du code ci-dessus, nous pouvons savoir que pour obtenir une connexion automatique, ces trois valeursdoivent avoir des valeurs. De plus, les deux méthodes findIdentity et validateAuthKey doivent également être implémentées dans le modèle utilisateur.
Après vous être connecté, vous pouvez réinitialiser la durée de validité du cookie afin qu'il soit valable tout le temps.
$this->switchIdentity($identity, $this->autoRenewCookie ? $duration : 0);
3. Quitter la déconnexion
public function logout($destroySession = true) { $identity = $this->getIdentity(); if ($identity !== null && $this->beforeLogout($identity)) { $this->switchIdentity(null); $id = $identity->getId(); $ip = Yii::$app->getRequest()->getUserIP(); Yii::info("User '$id' logged out from $ip.", __METHOD__); if ($destroySession) { Yii::$app->getSession()->destroy(); } $this->afterLogout($identity); } return $this->getIsGuest(); } public function switchIdentity($identity, $duration = 0) { $session = Yii::$app->getSession(); if (!YII_ENV_TEST) { $session->regenerateID(true); } $this->setIdentity($identity); $session->remove($this->idParam); $session->remove($this->authTimeoutParam); if ($identity instanceof IdentityInterface) { $session->set($this->idParam, $identity->getId()); if ($this->authTimeout !== null) { $session->set($this->authTimeoutParam, time() + $this->authTimeout); } if ($duration > 0 && $this->enableAutoLogin) { $this->sendIdentityCookie($identity, $duration); } } elseif ($this->enableAutoLogin) { Yii::$app->getResponse()->getCookies()->remove(new Cookie($this->identityCookie)); } }
退出的时候先把当前的认证设置为null,然后再判断如果是自动登录功能则再删除相关的cookie信息。
相关推荐:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Lorsque vous vous connectez au compte Steam de quelqu'un d'autre sur votre ordinateur et que le compte de cette autre personne dispose d'un logiciel de fond d'écran, Steam téléchargera automatiquement les fonds d'écran abonnés au compte de l'autre personne après être revenu à votre propre compte. Les utilisateurs peuvent résoudre ce problème en. désactiver la synchronisation du cloud Steam. Que faire si WallpaperEngine télécharge les fonds d'écran d'autres personnes après s'être connecté à un autre compte 1. Connectez-vous à votre propre compte Steam, recherchez la synchronisation cloud dans les paramètres et désactivez la synchronisation cloud Steam. 2. Connectez-vous au compte Steam de quelqu'un d'autre auquel vous vous êtes connecté auparavant, ouvrez Wallpaper Creative Workshop, recherchez le contenu de l'abonnement, puis annulez tous les abonnements. (Si vous ne trouvez pas le fond d'écran à l'avenir, vous pouvez d'abord le récupérer, puis annuler l'abonnement) 3. Revenez à votre propre Steam

Avec le développement rapide des médias sociaux, Xiaohongshu est devenue une plateforme populaire permettant à de nombreux jeunes de partager leur vie et d'explorer de nouveaux produits. Pendant l'utilisation, les utilisateurs peuvent parfois rencontrer des difficultés pour se connecter aux comptes précédents. Cet article expliquera en détail comment résoudre le problème de connexion à l'ancien compte sur Xiaohongshu et comment gérer la possibilité de perdre le compte d'origine après avoir modifié la liaison. 1. Comment se connecter au compte précédent de Xiaohongshu ? 1. Récupérez le mot de passe et connectez-vous. Si vous ne vous connectez pas à Xiaohongshu pendant une longue période, votre compte peut être recyclé par le système. Afin de restaurer les droits d'accès, vous pouvez tenter de vous reconnecter à votre compte en récupérant votre mot de passe. Les étapes de fonctionnement sont les suivantes : (1) Ouvrez l'application Xiaohongshu ou le site officiel et cliquez sur le bouton « Connexion ». (2) Sélectionnez « Récupérer le mot de passe ». (3) Entrez le numéro de téléphone mobile que vous avez utilisé lors de l'enregistrement de votre compte

Des milliers de fantômes ont crié dans les montagnes et les champs, et le bruit de l'échange d'armes a disparu. Les généraux fantômes qui se sont précipités sur les montagnes, l'esprit combatif faisant rage dans le cœur, ont utilisé le feu comme trompette pour conduire des centaines de fantômes à charger. dans la bataille. [Le skin de la collection Blazing Flame Bairen · Ibaraki Doji est maintenant en ligne] Les cornes fantômes flamboient de flammes, les yeux dorés éclatent d'un esprit combatif indiscipliné et les pièces d'armure de jade blanc décorent la chemise, montrant l'élan indiscipliné et sauvage du grand démon. Sur les manches flottantes blanches comme neige, des flammes rouges s'accrochaient et s'entrelaçaient, et des motifs dorés y étaient imprimés, enflammant une couleur cramoisie et magique. Les feux follets formés par le pouvoir démoniaque condensé rugirent et les flammes féroces secouaient les montagnes. Démons et fantômes qui sont revenus du purgatoire, punissons ensemble les intrus. [Cadre d'avatar dynamique exclusif·Blazing Flame Bailian] [Illustration exclusive·Firework General Soul] [Biographie Appréciation] [Comment obtenir] Le skin de collection d'Ibaraki Doji·Blazing Flame Bailian sera disponible dans la boutique de skins après la maintenance du 28 décembre.

La solution au problème de connexion en arrière-plan de Discuz est révélée. Des exemples de code spécifiques sont nécessaires Avec le développement rapide d'Internet, la construction de sites Web est devenue de plus en plus courante, et Discuz, en tant que système de création de sites Web de forum couramment utilisé, a été favorisé par. de nombreux webmasters. Cependant, précisément en raison de ses fonctions puissantes, nous rencontrons parfois des problèmes lors de l'utilisation de Discuz, comme des problèmes de connexion en arrière-plan. Aujourd'hui, nous allons révéler la solution au problème de connexion en arrière-plan de Discuz et fournir des exemples de code spécifiques. Nous espérons aider ceux qui en ont besoin.

Récemment, certains amis m'ont demandé comment se connecter à la version informatique de Kuaishou. Voici la méthode de connexion pour la version informatique de Kuaishou. Les amis dans le besoin peuvent venir en savoir plus. Étape 1 : Tout d’abord, recherchez le site officiel de Kuaishou sur Baidu dans le navigateur de votre ordinateur. Étape 2 : Sélectionnez le premier élément dans la liste des résultats de recherche. Étape 3 : Après avoir accédé à la page principale du site officiel de Kuaishou, cliquez sur l'option vidéo. Étape 4 : Cliquez sur l'avatar de l'utilisateur dans le coin supérieur droit. Étape 5 : Cliquez sur le code QR pour vous connecter dans le menu de connexion contextuel. Étape 6 : Ouvrez ensuite Kuaishou sur votre téléphone et cliquez sur l'icône dans le coin supérieur gauche. Étape 7 : Cliquez sur le logo du code QR. Étape 8 : Après avoir cliqué sur l'icône de numérisation dans le coin supérieur droit de l'interface Mon code QR, scannez le code QR sur votre ordinateur. Étape 9 : Connectez-vous enfin à la version informatique de Kuaishou

Les utilisateurs peuvent utiliser WallpaperEngine pour obtenir divers fonds d'écran. De nombreux utilisateurs ne savent pas pourquoi les fonds d'écran ont disparu après la fermeture de WallpaperEngine. Les fonds d'écran dynamiques ne peuvent s'exécuter sur le bureau que lorsque le logiciel avec lequel vous avez installé le fond d'écran est activé. Pourquoi les fonds d'écran ont-ils disparu après la fermeture de WallpaperEngine ? 1. Les fonds d'écran dynamiques ne peuvent s'exécuter sur le bureau que lorsque le logiciel avec lequel vous avez installé le fond d'écran est activé. 2. WallpaperEngine écrase le fond d'écran d'origine et, bien sûr, il disparaîtra lorsque vous quitterez. 3. Le fond d'écran est toujours là après sa désactivation, à moins que le format de fichier soit un type d'image qui peut être obtenu par certains moyens, mais qui n'est pas dynamique. 4. Il n'y a pas de vidéo ou d'image dynamique comme mur dans Windows.

Dans les mises à jour précédentes de Win11, nous pouvions ignorer la connexion avec un compte Microsoft, mais la dernière version familiale de Win11 oblige les utilisateurs à se connecter avec un compte Microsoft pour l'installation. Cependant, la connexion avec un compte Microsoft causera beaucoup de problèmes. souhaitez vous déconnecter une fois l'installation terminée. Laissez-moi vous apprendre comment quitter. Comment se déconnecter du compte Microsoft dans win11 1. Cliquez d'abord sur le menu Démarrer ci-dessous et recherchez "Paramètres", comme indiqué sur l'image. 2. Recherchez l'option « Utilisateurs » ou « Comptes » dans l'interface des paramètres. 3. Recherchez « Connectez-vous plutôt avec un compte local » dans l'interface utilisateur, qui est une ligne de texte bleu. 4. Entrez ensuite simplement le mot de passe de notre compte local pour vous connecter au compte local et vous déconnecter du compte Microsoft.

Comment se connecter à deux appareils avec Quark ? Quark Browser prend en charge la connexion à deux appareils en même temps, mais la plupart des amis ne savent pas comment se connecter à deux appareils avec Quark Browser. Ensuite, l'éditeur amène les utilisateurs de Quark à se connecter. à deux appareils. Méthode tutoriels graphiques, les utilisateurs intéressés viennent y jeter un oeil ! Didacticiel d'utilisation de Quark Browser Quark comment se connecter à deux appareils 1. Ouvrez d'abord l'application Quark Browser et cliquez sur [Quark Network Disk] sur la page principale. 2. Accédez ensuite à l'interface Quark Network Disk et sélectionnez la fonction de service [Ma sauvegarde] ; ; 3. Enfin, sélectionnez [Changer de périphérique] pour vous connecter à deux nouveaux appareils.
