Heim Backend-Entwicklung PHP-Tutorial Implementierungsmethode für automatische Anmeldung und Anmelde- und Exit-Funktionen des Yii2-Frameworks

Implementierungsmethode für automatische Anmeldung und Anmelde- und Exit-Funktionen des Yii2-Frameworks

Oct 25, 2017 am 09:02 AM
yii2 登录

Das Prinzip der automatischen Anmeldung ist sehr einfach. Dies wird hauptsächlich durch die Verwendung von Cookies erreicht.

Wenn die Anmeldung zum ersten Mal erfolgreich ist und die automatische Anmeldung beim nächsten Mal ausgewählt wird, werden die Authentifizierungsinformationen des Benutzers und die Gültigkeitsdauer des Cookies im Cookie gespeichert beträgt 1 Jahr oder Monat.

Stellen Sie bei der nächsten Anmeldung zunächst fest, ob die Benutzerinformationen im Cookie gespeichert sind. Wenn ja, verwenden Sie die im Cookie gespeicherten Benutzerinformationen, um sich anzumelden.

Konfigurieren Sie die Benutzerkomponente

Legen Sie zunächst die Benutzerkomponente in den Komponenten der Konfigurationsdatei fest


'user' => [
 'identityClass' => 'app\models\User',
 'enableAutoLogin' => true,
],
Nach dem Login kopieren

Wir sehen enableAutoLogin Wird verwendet, um zu bestimmen, ob die automatische Anmeldefunktion aktiviert werden soll. Dies hat nichts mit der nächsten automatischen Anmeldung auf der Schnittstelle zu tun.

Nur ​​wenn enableAutoLogin wahr ist und Sie sich beim nächsten Mal für die automatische Anmeldung entscheiden, werden die Benutzerinformationen in einem Cookie gespeichert und die Gültigkeitsdauer des Cookies wird auf 3600* gesetzt. 24 *30 Sekunden für die nächste Anmeldung

Jetzt schauen wir uns an, wie es in Yii implementiert wird.

1. Cookies speichern, wenn Sie sich zum ersten Mal anmelden

1. Anmeldefunktion


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();
}
Nach dem Login kopieren

Melden Sie sich hier einfach an und führen Sie dann die Methode switchIdentity aus, um die Authentifizierungsinformationen festzulegen.

2. switchIdentity legt Authentifizierungsinformationen fest


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));
  }
}
Nach dem Login kopieren

Diese Methode ist wichtiger und muss beim Beenden aufgerufen werden.

Diese Methode hat hauptsächlich drei Funktionen

① Legen Sie die Gültigkeitsdauer der Sitzung fest

② Wenn die Gültigkeitsdauer des Cookies größer als 0 ist und eine automatische Anmeldung zulässig ist, Speichern Sie dann die Authentifizierungsinformationen des Benutzers unter

③ im Cookie. Wenn die automatische Anmeldung zulässig ist, löschen Sie die Cookie-Informationen. Dies wird beim Verlassen aufgerufen. Die beim Beenden übergebene $identity ist null


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);
}
Nach dem Login kopieren

Die im Cookie gespeicherten Benutzerinformationen enthalten drei Werte:

$identity->getId()<code>$identity->getId()<br/>$identity->getAuthKey()<br/>$duration$identity->getAuthKey()

$duration

getId() und getAuthKey() sind in IdentityInterface

in der Schnittstelle. Wir wissen auch, dass beim Einrichten der Benutzerkomponente das Benutzermodell die IdentityInterface-Schnittstelle implementieren muss. Daher können Sie die ersten beiden Werte im Benutzermodell abrufen und der dritte Wert ist die Gültigkeitsdauer des Cookies.

2. Automatisch über Cookie anmelden

Aus dem oben Gesagten wissen wir, dass die Authentifizierungsinformationen des Benutzers im Cookie gespeichert wurden, also als nächstes Zeit Holen Sie sich einfach die Informationen direkt aus dem Cookie und setzen Sie sie.

1. AccessControl-Benutzerzugriffskontrolle

Yii bietet AccessControl, um festzustellen, ob der Benutzer angemeldet ist. Dadurch ist es nicht nötig, bei jeder Aktion erneut zu urteilen


public function behaviors()
{
  return [
   &#39;access&#39; => [
    &#39;class&#39; => AccessControl::className(),
    &#39;only&#39; => [&#39;logout&#39;],
    &#39;rules&#39; => [
     [
      &#39;actions&#39; => [&#39;logout&#39;],
      &#39;allow&#39; => true,
      &#39;roles&#39; => [&#39;@&#39;],
     ],
    ],
   ],
  ];
}
Nach dem Login kopieren

2. getIsGuest und getIdentity bestimmen, ob der Benutzer authentifiziert werden soll

isGuest ist das wichtigste Attribut bei der automatischen Anmeldung Verfahren.

Verwenden Sie in der oben genannten AccessControl-Zugriffskontrolle das Attribut IsGuest, um zu bestimmen, ob es sich um einen authentifizierten Benutzer handelt, und rufen Sie dann getIdentity in der getIsGuest-Methode < auf 🎜> Rufen Sie die Benutzerinformationen ab. Wenn diese nicht leer sind, bedeutet dies, dass es sich um einen authentifizierten Benutzer handelt, andernfalls handelt es sich um einen Besucher (nicht angemeldet).


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;
}
Nach dem Login kopieren

3. renewAuthStatus regeneriert Benutzerauthentifizierungsinformationen


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();
   }
  }
}
Nach dem Login kopieren

Dies Der Teil ermittelt zunächst den Benutzer über die Sitzung, da der Benutzer nach der Anmeldung bereits in der Sitzung vorhanden ist. Stellen Sie dann fest, ob es sich um eine automatische Anmeldung handelt, und melden Sie sich dann über die Cookie-Informationen an.

4. Melden Sie sich über die gespeicherten Cookie-Informationen loginByCookie an


protected function loginByCookie()
{
  $name = $this->identityCookie[&#39;name&#39;];
  $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 &#39;$id&#39; logged in from $ip via cookie.", __METHOD__);
      $this->afterLogin($identity, true, $duration);
     }
    } elseif ($identity !== null) {
     Yii::warning("Invalid auth key attempted for user &#39;$id&#39;: $authKey", __METHOD__);
    }
   }
  }
}
Nach dem Login kopieren

Lesen Sie zuerst den Cookie-Wert und dann $data = json_decode($value, true); In Array deserialisieren.

Aus dem obigen Code können wir erkennen, dass diese drei Werte Werte haben müssen, um eine automatische Anmeldung zu erreichen. Darüber hinaus müssen auch die beiden Methoden findIdentity und validateAuthKey im User Model implementiert sein.

Nach dem Anmelden können Sie die Gültigkeitsdauer des Cookies zurücksetzen, sodass es immer gültig ist.


$this->switchIdentity($identity, $this->autoRenewCookie ? $duration : 0);
Nach dem Login kopieren

3. Abmelden beenden


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));
  }
}
Nach dem Login kopieren

Setzen Sie beim Beenden zunächst die aktuelle Authentifizierung auf Null, stellen Sie dann fest, ob es sich um eine automatische Anmeldefunktion handelt, und löschen Sie dann die relevanten Cookie-Informationen.

Das obige ist der detaillierte Inhalt vonImplementierungsmethode für automatische Anmeldung und Anmelde- und Exit-Funktionen des Yii2-Frameworks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was soll ich tun, wenn ich das Hintergrundbild einer anderen Person herunterlade, nachdem ich mich bei WallpaperEngine bei einem anderen Konto angemeldet habe? Was soll ich tun, wenn ich das Hintergrundbild einer anderen Person herunterlade, nachdem ich mich bei WallpaperEngine bei einem anderen Konto angemeldet habe? Mar 19, 2024 pm 02:00 PM

Wenn Sie sich auf Ihrem Computer beim Steam-Konto einer anderen Person anmelden und das Konto dieser anderen Person über eine Hintergrundsoftware verfügt, lädt Steam automatisch die Hintergrundbilder herunter, die für das Konto der anderen Person abonniert wurden, nachdem Sie zu Ihrem eigenen Konto zurückgewechselt haben Deaktivieren der Steam-Cloud-Synchronisierung. Was tun, wenn WallpaperEngine die Hintergrundbilder anderer Personen herunterlädt, nachdem Sie sich bei einem anderen Konto angemeldet haben? 1. Melden Sie sich bei Ihrem eigenen Steam-Konto an, suchen Sie in den Einstellungen nach der Cloud-Synchronisierung und deaktivieren Sie die Steam-Cloud-Synchronisierung. 2. Melden Sie sich bei dem Steam-Konto einer anderen Person an, bei dem Sie sich zuvor angemeldet haben, öffnen Sie den Wallpaper Creative Workshop, suchen Sie nach den Abonnementinhalten und kündigen Sie dann alle Abonnements. (Falls Sie das Hintergrundbild in Zukunft nicht mehr finden, können Sie es zunächst abholen und dann das Abonnement kündigen.) 3. Wechseln Sie zurück zu Ihrem eigenen Steam

Wie melde ich mich bei meinem vorherigen Konto auf Xiaohongshu an? Was soll ich tun, wenn die ursprüngliche Nummer nach der erneuten Verbindung verloren geht? Wie melde ich mich bei meinem vorherigen Konto auf Xiaohongshu an? Was soll ich tun, wenn die ursprüngliche Nummer nach der erneuten Verbindung verloren geht? Mar 21, 2024 pm 09:41 PM

Mit der rasanten Entwicklung der sozialen Medien ist Xiaohongshu für viele junge Menschen zu einer beliebten Plattform geworden, auf der sie ihr Leben teilen und neue Produkte entdecken können. Während der Nutzung können Benutzer manchmal auf Schwierigkeiten stoßen, sich bei früheren Konten anzumelden. In diesem Artikel wird ausführlich erläutert, wie das Problem der Anmeldung beim alten Konto auf Xiaohongshu gelöst werden kann und wie mit der Möglichkeit umgegangen werden kann, dass das ursprüngliche Konto nach dem Ändern der Bindung verloren geht. 1. Wie melde ich mich bei Xiaohongshus vorherigem Konto an? 1. Rufen Sie das Passwort ab und melden Sie sich an. Wenn Sie sich längere Zeit nicht bei Xiaohongshu anmelden, wird Ihr Konto möglicherweise vom System recycelt. Um die Zugriffsrechte wiederherzustellen, können Sie versuchen, sich erneut bei Ihrem Konto anzumelden, indem Sie Ihr Passwort abrufen. Die Bedienungsschritte sind wie folgt: (1) Öffnen Sie die Xiaohongshu-App oder die offizielle Website und klicken Sie auf die Schaltfläche „Anmelden“. (2) Wählen Sie „Passwort abrufen“. (3) Geben Sie die Mobiltelefonnummer ein, die Sie bei der Registrierung Ihres Kontos verwendet haben

Der Kollektions-Skin „Onmyoji' Ibaraki Doji ist erhältlich, sobald Sie sich anmelden, und der neue Zen Heart Cloud Mirror-Skin wird bald veröffentlicht! Der Kollektions-Skin „Onmyoji' Ibaraki Doji ist erhältlich, sobald Sie sich anmelden, und der neue Zen Heart Cloud Mirror-Skin wird bald veröffentlicht! Jan 05, 2024 am 10:42 AM

Tausende von Geistern schrien in den Bergen und auf den Feldern, und das Geräusch des Waffenwechsels verschwand. Die Geistergeneräle, die mit wütendem Kampfgeist im Herzen über die Berge stürmten, nutzten das Feuer als Trompete, um Hunderte von Geistern zum Angriff zu verleiten in die Schlacht. [Blazing Flame Bairen·Ibaraki Doji Collection Skin ist jetzt online] Die Geisterhörner lodern vor Flammen, die vergoldeten Augen strotzen vor widerspenstigem Kampfgeist und die weißen Jade-Rüstungsteile zieren das Hemd und zeigen den widerspenstigen und wilden Schwung der Großen Dämon. Auf den schneeweißen, flatternden Ärmeln hingen rote Flammen und verschränkten sich, und auf ihnen waren goldene Muster eingeprägt, die eine purpurrote und magische Farbe entzündeten. Die durch die verdichtete Dämonenkraft geformten Irrlichter brüllten und die wilden Flammen erschütterten die Berge. Dämonen und Geister, die aus dem Fegefeuer zurückgekehrt waren, bestrafen wir gemeinsam die Eindringlinge. [Exklusiver dynamischer Avatar-Rahmen·Blazing Flame Bailian] [Exklusive Illustration·Firework General Soul] [Biografie-Wertschätzung] [So erhalten Sie] Ibaraki Dojis Kollektions-Skin·Blazing Flame Bailian wird nach der Wartung am 28. Dezember im Skin-Shop erhältlich sein.

Discuz-Lösung für das Anmeldeproblem im Hintergrund enthüllt Discuz-Lösung für das Anmeldeproblem im Hintergrund enthüllt Mar 03, 2024 am 08:57 AM

Die Lösung für das Discuz-Hintergrund-Login-Problem wird aufgezeigt. Mit der rasanten Entwicklung des Internets ist die Website-Erstellung immer häufiger geworden, und Discuz wurde als häufig verwendetes Forum-Website-Erstellungssystem bevorzugt viele Webmaster. Gerade aufgrund seiner leistungsstarken Funktionen stoßen wir jedoch manchmal auf Probleme bei der Verwendung von Discuz, wie z. B. Probleme bei der Anmeldung im Hintergrund. Heute werden wir die Lösung für das Discuz-Hintergrund-Login-Problem enthüllen und konkrete Codebeispiele bereitstellen. Wir hoffen, den Bedürftigen zu helfen.

So melden Sie sich bei der Kuaishou-PC-Version an - So melden Sie sich bei der Kuaishou-PC-Version an So melden Sie sich bei der Kuaishou-PC-Version an - So melden Sie sich bei der Kuaishou-PC-Version an Mar 04, 2024 pm 03:30 PM

Kürzlich haben mich einige Freunde gefragt, wie man sich bei der Kuaishou-Computerversion anmeldet. Hier ist die Anmeldemethode für die Kuaishou-Computerversion. Schritt 1: Suchen Sie zunächst im Browser Ihres Computers nach der offiziellen Website von Kuaishou auf Baidu. Schritt 2: Wählen Sie das erste Element in der Suchergebnisliste aus. Schritt 3: Nachdem Sie die Hauptseite der offiziellen Website von Kuaishou aufgerufen haben, klicken Sie auf die Videooption. Schritt 4: Klicken Sie oben rechts auf den Benutzer-Avatar. Schritt 5: Klicken Sie auf den QR-Code, um sich im Popup-Anmeldemenü anzumelden. Schritt 6: Öffnen Sie dann Kuaishou auf Ihrem Telefon und klicken Sie auf das Symbol in der oberen linken Ecke. Schritt 7: Klicken Sie auf das QR-Code-Logo. Schritt 8: Nachdem Sie auf das Scan-Symbol in der oberen rechten Ecke der Benutzeroberfläche „Mein QR-Code“ geklickt haben, scannen Sie den QR-Code auf Ihrem Computer. Schritt 9: Melden Sie sich abschließend bei der Computerversion von Kuaishou an

So installieren Sie GitHub Copilot unter Windows 11/10 So installieren Sie GitHub Copilot unter Windows 11/10 Oct 21, 2023 pm 11:13 PM

GitHubCopilot ist die nächste Stufe für Programmierer mit einem KI-basierten Modell, das Ihren Code erfolgreich vorhersagt und automatisch vervollständigt. Möglicherweise fragen Sie sich jedoch, wie Sie dieses KI-Genie auf Ihr Gerät bringen können, damit das Codieren noch einfacher wird! Die Verwendung von GitHub ist jedoch nicht gerade einfach und der anfängliche Einrichtungsprozess ist schwierig. Aus diesem Grund haben wir dieses Schritt-für-Schritt-Tutorial zur Installation und Implementierung von GitHub Copilot in VSCode unter Windows 11, 10 erstellt. So installieren Sie GitHubCopilot unter Windows. Dieser Prozess umfasst mehrere Schritte. Befolgen Sie jetzt die folgenden Schritte. Schritt 1 – Auf Ihrem Computer muss die neueste Version von Visual Studio installiert sein

So melden Sie sich bei Quark bei zwei Geräten an So melden Sie sich bei Quark bei zwei Geräten an Feb 23, 2024 pm 10:55 PM

Wie melde ich mich mit Quark bei zwei Geräten an? Quark Browser unterstützt die gleichzeitige Anmeldung bei zwei Geräten, aber die meisten Freunde wissen nicht, wie sie sich mit Quark Browser bei zwei Geräten anmelden können zu zwei Geräten. Interessierte Benutzer kommen vorbei und schauen sich die grafischen Tutorials an! Tutorial zur Quark Browser-Nutzung Quark, wie man sich bei zwei Geräten anmeldet 1. Öffnen Sie zunächst die Quark Browser-APP und klicken Sie auf der Hauptseite auf [Quark Network Disk] 2. Rufen Sie dann die Quark Network Disk-Benutzeroberfläche auf und wählen Sie die Dienstfunktion [Mein Backup]. 3. Wählen Sie abschließend [Gerät wechseln], um sich bei zwei neuen Geräten anzumelden.

Warum kann ich mich nicht bei der Computerversion von WeChat anmelden? Warum kann ich mich nicht bei der Computerversion von WeChat anmelden? Aug 18, 2023 pm 02:07 PM

Die Unfähigkeit, sich bei der Computerversion von WeChat anzumelden, wird durch Netzwerkverbindungsprobleme, falsche Eingabe von Konto und Passwort, WeChat-Serverfehler, Betriebssystem- oder Anwendungsprobleme, Kontosperrung oder abnormale Anmeldung usw. verursacht. Detaillierte Einführung: 1. Netzwerkverbindungsproblem, versuchen Sie, die Verbindung zum Netzwerk wiederherzustellen oder die Netzwerkumgebung zu ändern. 2. Falsche Konto- und Passworteingabe. Versuchen Sie, sich mit der mobilen Version von WeChat anzumelden, um zu überprüfen, ob das Konto und das Passwort korrekt sind. 3. WeChat-Serverfehler, versuchen Sie, eine Weile zu warten. Versuchen Sie, sich erneut anzumelden. 4. Betriebssystem- oder Anwendungsprobleme, versuchen Sie, das Betriebssystem oder die WeChat-Anwendung usw. zu aktualisieren.

See all articles