suchen
HeimBackend-EntwicklungPHP-TutorialDas Yii2-Framework implementiert Anmelde-, Abmelde- und automatische Anmeldefunktionen

In diesem Artikel wird hauptsächlich die Methode des Yii2-Frameworks zur Implementierung der Anmelde-, Abmelde- und automatischen Anmeldefunktionen vorgestellt. Er analysiert detailliert das Prinzip, die Implementierungsmethode und die damit verbundenen Betriebsvorkehrungen des Yii2-Frameworks zur Implementierung der Anmelde-, Abmelde- und automatischen Anmeldefunktionen im Formular von Beispielen. Freunde in Not. Sie können sich darauf beziehen, ich hoffe, es kann allen helfen.

Das Beispiel in diesem Artikel beschreibt, wie das Yii2-Framework Anmelde-, Abmelde- und automatische Anmeldefunktionen implementiert. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

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,
],

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();
}

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));
  }
}

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);
}

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. Damit 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;],
     ],
    ],
   ],
  ];
}

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 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;
}

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();
   }
  }
}

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__);
    }
   }
  }
}

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

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));
  }
}

退出的时候先把当前的认证设置为null,然后再判断如果是自动登录功能则再删除相关的cookie信息。

相关推荐:

Yii2框架实现可逆加密的简单方法分享

使用YII2框架开发实现微信公众号中表单提交功能教程详解

Yii2框架中日志的使用方法分析

Das obige ist der detaillierte Inhalt vonDas Yii2-Framework implementiert Anmelde-, Abmelde- und automatische Anmeldefunktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
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
如何在 Windows PC 上修复 Steam 登录错误 E84如何在 Windows PC 上修复 Steam 登录错误 E84Jun 28, 2023 am 08:20 AM

Steam登录错误E84是Steam用户在多次登录尝试中遇到的常见登录。如果您无法登录Steam,则无法执行任何有用的操作。如果您不先处理此E84登录错误,您将面临大量问题。初步解决方法–1.如果您是第一次在Steam中遇到此E84错误,重新启动系统可能会修复它。关闭Steam应用程序。将其从系统托盘中退出。然后,重新启动系统并重试整个过程。2.检查互联网连接是否有故障。如果您的互联网连接速度较慢,Steam登录可能会引发E84。修复1–将noreactlogin添加到Steam可执行文件您必须

1.1.1.1上网认证系统怎么登录1.1.1.1上网认证系统怎么登录Apr 20, 2023 am 10:44 AM

1.1.1.1上网认证系统登录方法:1、搜索校园网无线信号并连接;2、打开浏览器,在弹出的身份验证界面选择“自助服务”;3、输入用户名和初始密码进行登录;4、完善个人信息并设置为强密码即可。

为什么wallpaperengine退出后壁纸没了为什么wallpaperengine退出后壁纸没了Mar 12, 2024 pm 05:40 PM

用户使用wallpaperengine可以获得各种壁纸,有很多用户不知道为什么wallpaperengine退出后壁纸没了,动态壁纸必须在你所安装壁纸的软件开启的情况下才会运行在桌面上。为什么wallpaperengine退出后壁纸没了1、动态壁纸必须在你所安装壁纸的软件开启的情况下才会运行在桌面上。2、wallpaperengine是覆盖原来的壁纸,退出当然就没了。3、关了之后壁纸还在除非文件格式是图片类型的,可以通过一些手段获取,不过这样不是动态的。4、Windows里没有用视频或动态图当壁

微软账号的退出教程:如何退出Win11账号微软账号的退出教程:如何退出Win11账号Dec 25, 2023 pm 08:04 PM

在此前的win11更新中,我们可以跳过微软账户的登录,但是最新的win11家庭版强制用户登录微软账号才能进行安装,但是登录微软账号会带来很多麻烦,很多朋友想在安装完成后退出,下面小编就来教大家一下退出方法吧。win11怎么退出微软账号1、首先点击下方的开始菜单,在其中找到“设置”,如图所示。2、在设置界面中找到“用户”或“accounts”选项。3、在用户界面中找到“改用本地账户登录”,一行蓝色文字。4、然后只要输入我们本地账户的密码就可以登录本地账户,退出微软账号了。

教您win7登陆了怎么查看电脑密码教您win7登陆了怎么查看电脑密码Jul 11, 2023 pm 08:41 PM

在我们使用win7操作系统的过程中,我们通常会给电脑设置一个密码。最近就有小伙伴想要了解win7登陆了怎么查看电脑密码,其实win7查看电脑密码的方法非常简单。今天小编就来告诉大家win7查看电脑密码怎么操作。下面就让我们一起来看看吧!win7查看电脑密码的方法:1、按下win键+r键,输入rundll32netplwiz.dll,UsersRunDll,然后点击确定。2、取消勾选“要使用本机,用户必须输入用户名和密码”3、取消后点击确定,在弹出的对话框中不要输入你想让电脑每次自动登录的账户和密

如何通过JavaScript实现免登录功能如何通过JavaScript实现免登录功能Jun 15, 2023 pm 10:43 PM

在许多网络应用程序中,登录是一项必须的操作。然而,在一些情况下,尤其是在一些无需提供极高安全性的应用程序中,我们可以实现免登录功能,减轻用户登录的时间和操作次数。下面我们将介绍如何通过Javascript实现免登录功能。步骤一:使用cookie存储登录状态Cookies是一种为Web提供的数据存储方式,它可以将数据存储在用户本地计算机中。通过设置cookie

美团互助怎么退出_美团退出互助步骤流程美团互助怎么退出_美团退出互助步骤流程Mar 28, 2024 pm 03:01 PM

1、登录美团账号后首先需要点击【我的】功能。2、进入到【我的】页面后,接着再点击页面中的【进入钱包】功能。3、此时会弹出【美团钱包】页面,之后下拉页面到底部后在【更多服务】栏中点击【美团互助】功能。4、这时会进入到【美团互助】页面,接着再点击该页面的【查看详情】功能。5、进入到【互助详情】页面后再次把这个页面下拉到最底部,然后点击【放弃保障】功能。6、此时会弹出一个对话框,接着点击对话框中的【坚决退出】功能,这样就成功的退出美团互助了。

抖音粉丝团有什么用?别人的粉丝团怎样退出?抖音粉丝团有什么用?别人的粉丝团怎样退出?Apr 01, 2024 am 09:51 AM

随着移动互联网的迅猛发展,社交媒体成为人们生活中不可或缺的一部分。而作为其中最受欢迎的社交平台之一,抖音以其短视频内容和生动有趣的创意赢得了广大用户的喜爱。在抖音上,很多用户都会加入各种粉丝团,那么抖音粉丝团究竟有什么用呢?一、抖音粉丝团有什么用?抖音粉丝团为用户提供了一个聚集兴趣爱好者的社区。在这个社区里,用户可以找到与自己志同道合的人,共同探讨和分享感兴趣的话题。无论是追星族、音乐爱好者还是美食达人,只要你有相同的兴趣爱好,就能够在抖音粉丝团中找到属于自己的小圈子。抖音粉丝团也为用户提供了一

See all articles

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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung