Yii2 프레임워크는 로그인, 로그아웃 및 자동 로그인 기능을 구현합니다.
이 글에서는 로그인, 로그아웃, 자동 로그인 기능을 구현하기 위한 Yii2 프레임워크의 방법을 주로 소개하며, 로그인, 로그아웃, 자동 로그인 기능을 구현하기 위한 Yii2 프레임워크의 원리, 구현 방법 및 관련 동작 주의 사항을 예제 형식으로 자세히 분석합니다. . 도움이 필요한 친구들이 참고해서 모두에게 도움이 되기를 바랍니다.
이 문서의 예에서는 Yii2 프레임워크가 로그인, 로그아웃 및 자동 로그인 기능을 구현하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
자동 로그인의 원리는 매우 간단합니다. 이는 주로 쿠키를 사용하여 이루어지며, 최초 로그인 시, 다음 로그인 시 자동 로그인을 선택하면 쿠키에 사용자의 인증정보가 저장됩니다. 더.달.
다음번 로그인 시에는 먼저 사용자 정보가 쿠키에 저장되어 있는지 확인하세요. 그렇다면 쿠키에 저장된 사용자 정보를 이용하여 로그인하세요.
사용자 구성요소 구성첫 번째 설정 구성 파일의 구성 요소에 있습니다. 사용자 구성 요소
'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ],
enableAutoLogin
이 자동 로그인 기능 활성화 여부를 결정하는 데 사용되는 것을 볼 수 있습니다. 이는 인터페이스의 다음 자동 로그인과 관련이 없습니다.
enableAutoLogin이 true인 경우에만 다음 번에 자동 로그인을 선택하면 사용자 정보가 쿠키에 저장되며 다음 번 쿠키의 유효 기간은 3600*24*30초로 설정됩니다. . 로그인 이제 Yii에서 어떻게 구현되는지 살펴보겠습니다.
1. 최초 로그인 시 쿠키 저장
1. 로그인 기능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
메소드를 실행하여 설정을 합니다. 인증정보.
2.switchIdentity는 인증 정보를 설정합니다.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)); } }
이 메소드가 더 중요하며 종료 시 호출해야 합니다.
이 방법에는 크게 세 가지 기능이 있습니다
① 세션의 유효 기간을 설정합니다
② 쿠키의 유효 기간이 0보다 크고 자동 로그인이 허용되는 경우 사용자의 인증 정보를 쿠키에 저장합니다
3 자동 로그인이 허용된 경우 쿠키 정보를 삭제하세요. 나갈 때 호출됩니다. 종료 시 전달된
$identity는 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); }
쿠키에 저장된 사용자 정보에는 세 가지 값이 포함됩니다:
$identity->getId()</p>$identity->getAuthKey() <p>$duration
$identity->getId()<br/>$identity->getAuthKey()<br/>$duration
getId()和getAuthKey()是在IdentityInterface接口中的。我们也知道在设置User组件的时候,这个User Model是必须要实现IdentityInterface接口的。所以,可以在User Model中得到前两个值,第三值就是cookie的有效期。
二、自动从cookie登录
从上面我们知道用户的认证信息已经存储到cookie中了,那么下次的时候直接从cookie里面取信息然后设置就可以了。
1、AccessControl用户访问控制
Yii提供了AccessControl来判断用户是否登录,有了这个就不需要在每一个action里面再判断了
public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'only' => ['logout'], 'rules' => [ [ 'actions' => ['logout'], 'allow' => true, 'roles' => ['@'], ], ], ], ]; }
2、getIsGuest、getIdentity判断是否认证用户
isGuest是自动登录过程中最重要的属性。
在上面的AccessControl访问控制里面通过IsGuest属性来判断是否是认证用户,然后在getIsGuest方法里面是调用getIdentity来获取用户信息,如果不为空就说明是认证用户,否则就是游客(未登录)。
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 重新生成用户认证信息
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(); } } }
这一部分先通过session来判断用户,因为用户登录后就已经存在于session中了。然后再判断如果是自动登录,那么就通过cookie信息来登录。
4、通过保存的Cookie信息来登录 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__); } } } }
先读取cookie值,然后$data = json_decode($value, true);
IdentityInterface 인터페이스에 있습니다. 또한 User 구성 요소를 설정할 때 User 모델이 IdentityInterface 인터페이스를 구현해야 한다는 것도 알고 있습니다. 따라서 User Model에서 처음 두 값을 얻을 수 있고 세 번째 값은 쿠키의 유효 기간입니다.
2. 쿠키에서 자동 로그인
위에서 사용자의 인증 정보가 쿠키에 저장되어 있는 것을 알 수 있으므로 다음번에는 쿠키에서 직접 정보를 받아 설정하면 됩니다.
1. AccessControl 사용자 액세스 제어Yii는 사용자의 로그인 여부를 확인하는 AccessControl을 제공합니다. 이를 통해 모든 작업을 판단할 필요가 없습니다
$this->switchIdentity($identity, $this->autoRenewCookie ? $duration : 0);
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)); } }
$data = json_decode($value, true);
로 역직렬화합니다. 배열. 🎜🎜위 코드를 보면 자동 로그인을 위해서는 이 세 가지 값이 반드시 값을 가지고 있어야 한다는 것을 알 수 있습니다. 또한 🎜findIdentity🎜 및 🎜validateAuthKey🎜 두 가지 방법도 사용자 모델에서 구현되어야 합니다. 🎜🎜로그인 후 쿠키의 유효기간을 재설정하여 항상 유효하도록 할 수 있습니다. 🎜🎜🎜🎜rrreee🎜🎜🎜3. 로그아웃 종료🎜🎜🎜🎜🎜🎜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 프레임워크는 로그인, 로그아웃 및 자동 로그인 기능을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











귀하의 컴퓨터에서 다른 사람의 Steam 계정에 로그인하고 그 다른 사람의 계정에 우연히 배경화면 소프트웨어가 있는 경우, Steam은 자신의 계정으로 다시 전환한 후 다른 사람의 계정에 구독된 배경화면을 자동으로 다운로드합니다. 스팀 클라우드 동기화를 끄세요. 다른 계정에 로그인한 후 wallpaperengine이 다른 사람의 배경화면을 다운로드하는 경우 해결 방법 1. 자신의 Steam 계정에 로그인하고 설정에서 클라우드 동기화를 찾아 Steam Cloud 동기화를 끄세요. 2. 이전에 로그인했던 다른 사람의 Steam 계정으로 로그인하여 Wallpaper Creative Workshop을 열고 구독 콘텐츠를 찾은 다음 모든 구독을 취소하세요. (나중에 배경화면을 찾을 수 없는 경우 먼저 수집한 후 구독을 취소할 수 있습니다.) 3. 자신의 스팀으로 다시 전환합니다.

소셜 미디어의 급속한 발전으로 Xiaohongshu는 많은 젊은이들이 자신의 삶을 공유하고 신제품을 탐색할 수 있는 인기 플랫폼이 되었습니다. 사용 중에 때때로 사용자가 이전 계정에 로그인하는 데 어려움을 겪을 수 있습니다. 이 글에서는 Xiaohongshu의 기존 계정에 로그인하는 문제를 해결하는 방법과 바인딩 변경 후 원래 계정을 잃을 가능성에 대처하는 방법에 대해 자세히 설명합니다. 1. Xiaohongshu의 이전 계정에 어떻게 로그인하나요? 1. 비밀번호를 찾아 로그인하세요. 장기간 Xiaohongshu에 로그인하지 않으면 시스템에 의해 계정이 재활용될 수 있습니다. 접근 권한을 복원하려면 비밀번호를 검색하여 계정에 다시 로그인해 보세요. 작업 단계는 다음과 같습니다. (1) Xiaohongshu 앱이나 공식 웹사이트를 열고 "로그인" 버튼을 클릭합니다. (2) "비밀번호 찾기"를 선택하세요. (3) 회원가입 시 사용한 휴대폰 번호를 입력하세요.

산과 들에서 수천 명의 귀신이 비명을 지르고, 무기 교환 소리가 사라졌다. 투혼을 불태우며 산을 뛰어넘은 귀신장수들은 불을 나팔 삼아 수백 명의 귀신을 이끌고 돌격했다. 전투에. [타오르는 불꽃 바이렌·이바라키 도지 콜렉션 스킨 출시] 유령뿔은 불꽃으로 타오르고, 금빛 눈은 거침없는 투지를 터뜨리고, 백옥 갑옷 조각이 셔츠를 장식하여 거침없고 거친 대왕의 기세를 보여줍니다. 악마. 순백색의 나풀거리는 소매에는 붉은 불꽃이 달라붙어 얽혀 있고, 그 위에 금색 문양이 새겨져 진홍빛과 마법의 색을 발산했다. 응축된 악마의 힘으로 형성된 의지의 포효가 울부짖고, 맹렬한 불길이 산을 뒤흔들었다. 연옥에서 돌아온 악마와 유령들이 함께 침입자들을 처단하자. [전용 다이내믹 아바타 프레임·불꽃 바이리안] [전용 일러스트·불꽃 장군의 영혼] [약력 감상] [획득 방법] 이바라키 도지 컬렉션 스킨·불꽃 바이리안은 12월 28일 점검 후 스킨 스토어에서 만나보실 수 있습니다.

Discuz 백그라운드 로그인 문제에 대한 해결책이 공개되었습니다. 인터넷의 급속한 발전으로 인해 웹 사이트 구축이 점점 보편화되고 있으며 일반적으로 사용되는 포럼 웹 사이트 구축 시스템으로 Discuz가 선호되고 있습니다. 많은 웹마스터. 그러나 강력한 기능으로 인해 Discuz를 사용할 때 백그라운드 로그인 문제와 같은 몇 가지 문제가 발생할 수 있습니다. 오늘은 Discuz 백그라운드 로그인 문제에 대한 해결책을 공개하고 구체적인 코드 예시를 제공하여 도움이 필요한 분들에게 도움이 되기를 바라겠습니다.

최근 몇몇 친구들이 Kuaishou 컴퓨터 버전에 로그인하는 방법을 물었습니다. Kuaishou 컴퓨터 버전의 로그인 방법은 다음과 같습니다. 도움이 필요한 친구들이 와서 자세히 알아볼 수 있습니다. 1단계: 먼저 컴퓨터 브라우저에서 Baidu의 Kuaishou 공식 웹사이트를 검색하세요. 2단계: 검색 결과 목록에서 첫 번째 항목을 선택합니다. 3단계: Kuaishou 공식 웹사이트 메인 페이지에 들어간 후 비디오 옵션을 클릭하세요. 4단계: 오른쪽 상단에 있는 사용자 아바타를 클릭하세요. 5단계: 팝업 로그인 메뉴에서 QR 코드를 클릭하여 로그인하세요. 6단계: 그런 다음 휴대폰에서 Kuaishou를 열고 왼쪽 상단에 있는 아이콘을 클릭하세요. 7단계: QR 코드 로고를 클릭하세요. 8단계: 내 QR 코드 인터페이스 오른쪽 상단에 있는 스캔 아이콘을 클릭한 후 컴퓨터에서 QR 코드를 스캔하세요. 9단계: 마지막으로 Kuaishou의 컴퓨터 버전에 로그인합니다.

사용자는 wallpaperengine을 사용하여 다양한 배경화면을 얻을 수 있습니다. 많은 사용자는 wallpaperengine이 종료된 후 배경화면이 사라지는 이유를 모릅니다. 동적 배경화면은 배경화면을 설치한 소프트웨어가 켜져 있을 때만 데스크탑에서 실행될 수 있습니다. wallpaperengine이 종료된 후 배경화면이 사라지는 이유는 무엇입니까? 1. 동적 배경화면은 배경화면을 설치한 소프트웨어가 켜져 있을 때만 데스크탑에서 실행될 수 있습니다. 2. WallpaperEngine은 원본 배경화면을 덮어쓰며, 종료하면 당연히 사라집니다. 3. 파일 형식이 어떤 수단을 통해 얻을 수 있지만 동적이 아닌 이미지 유형이 아닌 이상 배경화면은 꺼진 후에도 그대로 유지됩니다. 4. Windows에는 벽과 같은 비디오나 동적 이미지가 없습니다.

이전 win11 업데이트에서는 Microsoft 계정으로 로그인을 건너뛸 수 있었지만 최신 win11 홈 버전에서는 사용자가 Microsoft 계정으로 로그인하여 설치해야 합니다. 그러나 Microsoft 계정으로 로그인하면 많은 문제가 발생합니다. 설치가 완료된 후 로그아웃하고 싶습니다. 종료하는 방법을 알려드리겠습니다. win11에서 Microsoft 계정에서 로그아웃하는 방법 1. 먼저 아래 시작 메뉴를 클릭하고 그림과 같이 "설정"을 찾으세요. 2. 설정 인터페이스에서 "사용자" 또는 "계정" 옵션을 찾으세요. 3. 사용자 인터페이스에서 파란색 텍스트로 표시된 "대신 로컬 계정으로 로그인"을 찾으세요. 4. 그런 다음 로컬 계정의 비밀번호를 입력하여 로컬 계정에 로그인하고 Microsoft 계정에서 로그아웃하세요.

Quark Browser를 사용하여 두 장치에 로그인하는 방법은 무엇입니까? Quark Browser는 동시에 두 장치에 로그인하는 것을 지원하지만 대부분의 친구는 Quark Browser를 사용하여 두 장치에 로그인하는 방법을 모릅니다. 다음으로 편집기는 사용자가 Quark에 로그인하도록 합니다. 두 가지 장치에 대한 방법 그래픽 튜토리얼, 관심 있는 사용자가 와서 살펴보세요! Quark Browser 사용 튜토리얼 Quark 두 장치에 로그인하는 방법 1. 먼저 Quark Browser 앱을 열고 메인 페이지에서 [Quark Network Disk]를 클릭합니다. 2. 그런 다음 Quark Network Disk 인터페이스에 들어가서 [My Backup] 서비스 기능을 선택합니다. 3. 마지막으로 [장치 전환]을 선택하여 두 개의 새로운 장치에 로그인합니다.
