久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Yii2框架實(shí)現(xiàn)登錄、退出及自動(dòng)登錄功能的方法詳解

這篇文章主要介紹了Yii2框架實(shí)現(xiàn)登錄、退出及自動(dòng)登錄功能的方法,結(jié)合實(shí)例形式詳細(xì)分析了Yii2框架實(shí)現(xiàn)登錄、退出及自動(dòng)登錄功能的原理、實(shí)現(xiàn)方法與相關(guān)操作注意事項(xiàng),需要的朋友可

本文實(shí)例講述了Yii2框架實(shí)現(xiàn)登錄、退出及自動(dòng)登錄功能的方法。分享給大家供大家參考,具體如下:

自動(dòng)登錄的原理很簡單。主要就是利用cookie來實(shí)現(xiàn)的

在第一次登錄的時(shí)候,如果登錄成功并且選中了下次自動(dòng)登錄,那么就會(huì)把用戶的認(rèn)證信息保存到cookie中,cookie的有效期為1年或者幾個(gè)月。

在下次登錄的時(shí)候先判斷cookie中是否存儲(chǔ)了用戶的信息,如果有則用cookie中存儲(chǔ)的用戶信息來登錄,

配置User組件

首先在配置文件的components中設(shè)置user組件

'user' => [
 'identityClass' => 'app\models\User',
 'enableAutoLogin' => true,
],

我們看到enableAutoLogin就是用來判斷是否要啟用自動(dòng)登錄功能,這個(gè)和界面上的下次自動(dòng)登錄無關(guān)。

只有在enableAutoLogin為true的情況下,如果選擇了下次自動(dòng)登錄,那么就會(huì)把用戶信息存儲(chǔ)起來放到cookie中并設(shè)置cookie的有效期為3600*24*30秒,以用于下次登錄

現(xiàn)在我們來看看Yii中是怎樣實(shí)現(xiàn)的。

一、第一次登錄存cookie

1、login 登錄功能

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

在這里,就是簡單的登錄,然后執(zhí)行switchIdentity方法,設(shè)置認(rèn)證信息。

2、switchIdentity設(shè)置認(rèn)證信息

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

這個(gè)方法比較重要,在退出的時(shí)候也需要調(diào)用這個(gè)方法。

這個(gè)方法主要有三個(gè)功能

① 設(shè)置session的有效期

② 如果cookie的有效期大于0并且允許自動(dòng)登錄,那么就把用戶的認(rèn)證信息保存到cookie中

③ 如果允許自動(dòng)登錄,刪除cookie信息。這個(gè)是用于退出的時(shí)候調(diào)用的。退出的時(shí)候傳遞進(jìn)來的$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);
}

存儲(chǔ)在cookie中的用戶信息包含有三個(gè)值:

$identity->getId()
$identity->getAuthKey()
$duration

getId()和getAuthKey()是在IdentityInterface接口中的。我們也知道在設(shè)置User組件的時(shí)候,這個(gè)User Model是必須要實(shí)現(xiàn)IdentityInterface接口的。所以,可以在User Model中得到前兩個(gè)值,第三值就是cookie的有效期。

二、自動(dòng)從cookie登錄

從上面我們知道用戶的認(rèn)證信息已經(jīng)存儲(chǔ)到cookie中了,那么下次的時(shí)候直接從cookie里面取信息然后設(shè)置就可以了。

1、AccessControl用戶訪問控制

Yii提供了AccessControl來判斷用戶是否登錄,有了這個(gè)就不需要在每一個(gè)action里面再判斷了

public function behaviors()
{
  return [
   'access' => [
    'class' => AccessControl::className(),
    'only' => ['logout'],
    'rules' => [
     [
      'actions' => ['logout'],
      'allow' => true,
      'roles' => ['@'],
     ],
    ],
   ],
  ];
}

2、getIsGuest、getIdentity判斷是否認(rèn)證用戶

isGuest是自動(dòng)登錄過程中最重要的屬性。

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

我們在用pbootcms網(wǎng)站時(shí)候,后臺(tái)驗(yàn)證碼不顯示或者顯示不清楚,這個(gè)要怎么解決? 今天html5模板網(wǎng)就給大家列出一下幾個(gè)會(huì)造成pbootcms驗(yàn)證碼不顯示的原因。 1、中文路徑問題(建站大忌
本文主要給大家講述了PHP實(shí)現(xiàn)QQ登錄的開原理以及相關(guān)的代碼實(shí)現(xiàn)過程,對此有興趣和需要的朋友參考下吧。
這篇文章主要介紹了Laravel5.2使用Captcha生成驗(yàn)證碼(session巨坑),需要的朋友可以參考下
Yii2的rule用于對模型屬性進(jìn)行驗(yàn)證,scenario用戶定義不同場景下需要驗(yàn)證的模型,下面這篇文章主要給大家介紹了關(guān)于Yii2中場景(scenario)和驗(yàn)證規(guī)則(rule)的相關(guān)資料,文中通過示例代碼介
隨著微信的普及,掃碼登錄方式越來越被現(xiàn)在的應(yīng)用所使用。它因?yàn)椴挥萌ビ涀∶艽a,只要有微信號即可方便快捷登錄.這里基于微信公眾平臺(tái)的帶參數(shù)臨時(shí)二維碼,并且結(jié)合 Swoole 的
本篇文章主要介紹了淺談使用 Yii2 AssetBundle 中 $publishOptions 的正確姿勢,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
主站蜘蛛池模板: 日韩精品免费在线观看 | 久久久国产一区二区三区 | 精品久久久久久亚洲国产800 | 精品1区| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美a级成人淫片免费看 | 免费观看一级黄色录像 | 拍戏被cao翻了h承欢 | 日韩亚洲欧美综合 | 欧美日韩在线视频一区 | 超碰97在线免费 | 国产日韩一区二区 | 51ⅴ精品国产91久久久久久 | 欧美一区二区视频 | 蜜桃视频在线观看免费视频网站www | 久久免费精品视频 | 蜜臀久久 | av一级久久| 亚州无限乱码 | 人人草天天草 | 人人种亚洲| 中文字幕av一区二区三区 | www.日本国产 | 亚洲最大av | 亚洲电影专区 | 黄色免费三级 | 99久久精品免费看国产四区 | 毛片免费在线 | 国产91久久久久久久免费 | www.中文字幕.com | 欧美日韩国产一区二区 | 国产精品久久一区二区三区 | 99久久精品国产毛片 | 日韩一区二区三区av | 一级在线毛片 | 日本精品久久久久久久 | 亚洲精品久久久一区二区三区 | 欧美日韩亚洲国产 | www.中文字幕av | 国产激情一区二区三区 | 人人做人人澡人人爽欧美 |