


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(); }Ici, connectez-vous simplement, puis exécutez la méthode
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)); } }Cette méthode est plus importante et doit être appelée lors de la sortie de . Cette méthode a principalement trois fonctions① Définir la durée de validité de la session② Si la durée de validité du cookie est supérieure à 0 et que la connexion automatique est autorisée, puis enregistrez les informations d'authentification de l'utilisateur dans ③ dans le cookie. Si la connexion automatique est autorisée, supprimez les informations du cookie. Ceci est appelé lors de la sortie. La
$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); }Les informations utilisateur stockées dans le cookie contiennent trois valeurs :
$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!

Le PHP reste important dans le développement Web moderne, en particulier dans la gestion de contenu et les plateformes de commerce électronique. 1) PHP a un écosystème riche et un fort soutien-cadre, tels que Laravel et Symfony. 2) L'optimisation des performances peut être obtenue via Opcache et Nginx. 3) PHP8.0 introduit le compilateur JIT pour améliorer les performances. 4) Les applications natives dans le cloud sont déployées via Docker et Kubernetes pour améliorer la flexibilité et l'évolutivité.

PHP convient au développement Web, en particulier dans le développement rapide et le traitement du contenu dynamique, mais n'est pas bon dans les applications de la science des données et de l'entreprise. Par rapport à Python, PHP présente plus d'avantages dans le développement Web, mais n'est pas aussi bon que Python dans le domaine de la science des données; Par rapport à Java, PHP fonctionne moins bien dans les applications au niveau de l'entreprise, mais est plus flexible dans le développement Web; Par rapport à JavaScript, PHP est plus concis dans le développement back-end, mais n'est pas aussi bon que JavaScript dans le développement frontal.

PHP et Python ont chacun leurs propres avantages et conviennent à différents scénarios. 1.PHP convient au développement Web et fournit des serveurs Web intégrés et des bibliothèques de fonctions riches. 2. Python convient à la science des données et à l'apprentissage automatique, avec une syntaxe concise et une bibliothèque standard puissante. Lors du choix, il doit être décidé en fonction des exigences du projet.

PHP est un langage de script largement utilisé du côté du serveur, particulièrement adapté au développement Web. 1.Php peut intégrer HTML, traiter les demandes et réponses HTTP et prend en charge une variété de bases de données. 2.PHP est utilisé pour générer du contenu Web dynamique, des données de formulaire de traitement, des bases de données d'accès, etc., avec un support communautaire solide et des ressources open source. 3. PHP est une langue interprétée, et le processus d'exécution comprend l'analyse lexicale, l'analyse grammaticale, la compilation et l'exécution. 4.PHP peut être combiné avec MySQL pour les applications avancées telles que les systèmes d'enregistrement des utilisateurs. 5. Lors du débogage de PHP, vous pouvez utiliser des fonctions telles que error_reportting () et var_dump (). 6. Optimiser le code PHP pour utiliser les mécanismes de mise en cache, optimiser les requêtes de base de données et utiliser des fonctions intégrées. 7

Les raisons pour lesquelles PHP est la pile technologique préférée pour de nombreux sites Web incluent sa facilité d'utilisation, son soutien communautaire solide et son utilisation généralisée. 1) Facile à apprendre et à utiliser, adapté aux débutants. 2) Avoir une énorme communauté de développeurs et des ressources riches. 3) Largement utilisé dans WordPress, Drupal et d'autres plateformes. 4) Intégrez étroitement aux serveurs Web pour simplifier le déploiement du développement.

PHP reste un outil puissant et largement utilisé dans la programmation moderne, en particulier dans le domaine du développement Web. 1) PHP est facile à utiliser et intégré de manière transparente aux bases de données, et est le premier choix pour de nombreux développeurs. 2) Il prend en charge la génération de contenu dynamique et la programmation orientée objet, adaptée à la création et à la maintenance des sites Web rapidement. 3) Les performances de PHP peuvent être améliorées en mettant en cache et en optimisant les requêtes de base de données, et sa vaste communauté et son écosystème riche le rendent toujours important dans la pile technologique d'aujourd'hui.

En PHP, les références faibles sont mises en œuvre via la classe FaibleRreference et n'empêcheront pas le collecteur des ordures de récupérer des objets. Les références faibles conviennent aux scénarios tels que les systèmes de mise en cache et les auditeurs d'événements. Il convient de noter qu'il ne peut garantir la survie des objets et que la collecte des ordures peut être retardée.

La méthode \ _ \ _ Invoke permet aux objets d'être appelés comme des fonctions. 1. Définissez la méthode \ _ \ _ Invoquer afin que l'objet puisse être appelé. 2. Lorsque vous utilisez la syntaxe $ obj (...), PHP exécutera la méthode \ _ \ _ Invoke. 3. Convient pour des scénarios tels que la journalisation et la calculatrice, l'amélioration de la flexibilité et de la lisibilité du code.


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

Version Mac de WebStorm
Outils de développement JavaScript utiles

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

Dreamweaver Mac
Outils de développement Web visuel

mPDF
mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire