久久久久久久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í)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

我們?cè)谟胮bootcms網(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)過程,對(duì)此有興趣和需要的朋友參考下吧。
這篇文章主要介紹了Laravel5.2使用Captcha生成驗(yàn)證碼(session巨坑),需要的朋友可以參考下
Yii2的rule用于對(duì)模型屬性進(jìn)行驗(yàn)證,scenario用戶定義不同場景下需要驗(yàn)證的模型,下面這篇文章主要給大家介紹了關(guān)于Yii2中場景(scenario)和驗(yàn)證規(guī)則(rule)的相關(guān)資料,文中通過示例代碼介
隨著微信的普及,掃碼登錄方式越來越被現(xiàn)在的應(yīng)用所使用。它因?yàn)椴挥萌ビ涀∶艽a,只要有微信號(hào)即可方便快捷登錄.這里基于微信公眾平臺(tái)的帶參數(shù)臨時(shí)二維碼,并且結(jié)合 Swoole 的
本篇文章主要介紹了淺談使用 Yii2 AssetBundle 中 $publishOptions 的正確姿勢(shì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
主站蜘蛛池模板: 久久国产成人午夜av影院武则天 | 欧美日韩黄色一级片 | 久久av在线播放 | 一级电影免费看 | 日韩视频在线免费观看 | 亚洲精品一区二区三区蜜桃久 | 国产成人精品网站 | 国产精品国产亚洲精品看不卡15 | 操久久| 成人高清在线 | 久久国产欧美日韩精品 | 国产网站久久 | 九九一级片 | 久久精品视频在线免费观看 | 国产999在线观看 | 成人免费在线 | 激情亚洲| 麻豆av在线免费观看 | 中文字幕一级毛片 | 欧美精品一区二区三区在线播放 | 中文字幕在线观看视频一区 | 日本激情视频网 | 91视频国产一区 | av在线一区二区三区 | 久久精品一区 | 精品小视频 | 开操网 | 人人鲁人人莫人人爱精品 | 国产三级一区二区三区 | 午夜国产一级 | caoporn视频| 国产91av视频在线观看 | 日韩欧美精品在线 | 久久久精 | 一区二区三区四区五区在线视频 | 日韩欧美国产成人一区二区 | 欧美激情久久久 | 欧美一区二区三区一在线观看 | 亚洲综合婷婷 | 超碰在线播 | 国产精品欧美一区二区三区 |