校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > YII2框架中自定義用戶認證模型,完成登陸和注冊操作示例

YII2框架中自定義用戶認證模型,完成登陸和注冊操作示例

熱門標簽:重慶外呼電銷系統多少錢 咸陽電銷 嘟嘟云外呼系統 南寧電話外呼系統線路 辦理400電話哪家好點 邢臺400電話辦理 南京3D地圖標注 濟源百應電銷機器人聯系方式 正規電銷機器人系統

本文實例講述了YII2框架中自定義用戶認證模型,完成登陸和注冊操作。分享給大家供大家參考,具體如下:

有些時候我們需要自已定義用戶類,操作自已建的用戶表,來完成登陸和注冊功能。

用戶表結構如下,當然可以根據自已的需要添加或刪除:

CREATE TABLE `tb_user` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '用戶ID',
 `name` varchar(32) DEFAULT '' COMMENT '用戶名',
 `pwd` varchar(64) DEFAULT '' COMMENT '密碼',
 `head_img` varchar(256) DEFAULT '' COMMENT '圖像',
 `sex` tinyint(1) DEFAULT '0' COMMENT '性別(0:男,1:女)',
 `age` tinyint(3) DEFAULT '0' COMMENT '年齡',
 `auth_key` varchar(32) DEFAULT '' COMMENT '認證密鑰',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶表';

然后我們在models下創建MyUser.php,代碼如下:

?php

namespace app\models;

use YII;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;

//我們自定義自已的用戶操作模型,需要實現IdentityInterface接口中的全部方法
//我們自定義的模型主要實現的是認證邏輯,而yii\web\User是負責管理用戶認證狀態的,兩者是有區別的。
class MyUser extends ActiveRecord implements IdentityInterface
{
  //指定操作的表名
  public static function tableName()
  {
    return '{{%user}}';
  }

  //通過ID,返回用戶實例
  public static function findIdentity($id)
  {
    return static::findOne($id);
  }

  //通過令牌,返回用戶實例,一般用于無狀態的restful應用
  //如果你的應用不需要用到,直接留空就行
  public static function findIdentityByAccessToken($token, $type = null)
  {
    return static::findOne(['access_token' => $token]);
  }

  //通過用戶名,返回用戶實例
  public static function findByUsername($name)
  {
    return static::findOne(['name' => $name]);
  }

  //獲取用戶ID
  public function getId()
  {
    return $this->id;
  }

  //獲取用戶認證密鑰
  public function getAuthKey()
  {
    return $this->auth_key;
  }

  //生成cookie中的authkey
  public function generateAuthKey()
  {
    $this->auth_key = Yii::$app->security->generateRandomString(32);
    $this->save(false);
  }

  //驗證用戶認證密鑰
  public function validateAuthKey($authKey)
  {
    return $this->getAuthKey() === $authKey;
  }

  //驗證密碼是否正確,當然我們也可以自已定義加密解密方式
  public function validatePassword($password)
  {
    return Yii::$app->security->validatePassword($password, $this->pwd);
  }
}

創建完我們自已的用戶模型類后,我們需要在配置文件中修改成我們自已的,在config\web.php

'components' => [
	// ...
	'user' => [
		'identityClass' => 'app\models\MyUser',
		'enableAutoLogin' => true,
	],
];

然后我們創建一個登陸頁面

?php
use yii\helpers\Url;
?>
!doctype html>
html lang="zh-CN">
head>
  meta charset="UTF-8">
  title>表單提交/title>
/head>
body>
form action="?php echo Url::toRoute('index/login'); ?>" method="post">
  姓名:input type="text" name="name">br>
  密碼:input type="password" name="pwd">br>
  input type="submit" value="登陸">
  input name="_csrf" type="hidden" value="?php echo \Yii::$app->request->csrfToken; ?>">
/form>
/body>
/html>

然后是處理用戶登陸的,表單模型,在models下創建MyUserLogin.php

?php

namespace app\models;

use Yii;
use yii\base\Model;

class MyUserLogin extends Model
{
  //注意這里要聲明表單中提交過來的變量
  public $name;
  public $pwd;

  //設置驗證
  public function rules()
  {
    return [
      [['name', 'pwd'], 'required'],
      ['pwd', 'validatePassword'],
    ];
  }

  //驗證密碼
  public function validatePassword($attribute, $params)
  {
    if (!$this->hasErrors()) {
      $user = $this->getUser();

      if (!$user || !$user->validatePassword($this->pwd)) {
        $this->addError($attribute, '密碼錯誤');
      }
    }
  }

  //登陸處理
  public function login()
  {
    if ($this->validate()) {
      $user = $this->getUser();
      //監聽事件,登陸前,重新生成authkey
      YII::$app->user->on(\yii\web\User::EVENT_BEFORE_LOGIN, [$user, 'generateAuthKey']);

      return Yii::$app->user->login($user, 3600 * 24);
    }
    return false;
  }

  //獲取用戶
  public function getUser()
  {
    return MyUser::findByUsername($this->name);
  }
}

最后就是我們的控制器代碼

?php

namespace app\controllers;

use YII;
use yii\web\Controller;
use app\models\MyUserLogin;

class IndexController extends Controller
{
  public function actionIndex()
  {
    //當前用戶的ID
    var_dump(YII::$app->user->id);
    //當前用戶是否是游客
    var_dump(YII::$app->user->isGuest);
  }

  public function actionLogin()
  {
    if (YII::$app->request->isPost) {

      $model = new MyUserLogin();
      $model->load(YII::$app->request->post(), '');

      if ($model->login()) {
        echo '登陸成功';
      } else {
        echo '登陸失敗';
      }

    } else {
      return $this->renderPartial('login');
    }
  }
}

演示如下:

更多關于Yii相關內容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結》、《php優秀開發框架總結》、《smarty模板入門基礎教程》、《php面向對象程序設計入門教程》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家基于Yii框架的PHP程序設計有所幫助。

您可能感興趣的文章:
  • Yii2.0框架模型添加/修改/刪除數據操作示例
  • Yii2.0框架模型多表關聯查詢示例
  • Yii中Model(模型)的創建及使用方法
  • yii框架表單模型使用及以數組形式提交表單數據示例
  • PHP YII框架開發小技巧之模型(models)中rules自定義驗證規則
  • PHP的Yii框架中Model模型的學習教程
  • Yii框架數據模型的驗證規則rules()被執行的方法
  • YII動態模型(動態表名)支持分析
  • Yii框架表單模型和驗證用法
  • Yii模型操作之criteria查找數據庫的方法
  • Yii數據模型中rules類驗證器用法分析
  • yii2.0框架多模型操作示例【添加/修改/刪除】

標簽:通遼 河南 南通 唐山 黃山 武漢 平頂山 隴南

巨人網絡通訊聲明:本文標題《YII2框架中自定義用戶認證模型,完成登陸和注冊操作示例》,本文關鍵詞  YII2,框架,中,自定義,用戶,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《YII2框架中自定義用戶認證模型,完成登陸和注冊操作示例》相關的同類信息!
  • 本頁收集關于YII2框架中自定義用戶認證模型,完成登陸和注冊操作示例的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲成人手机在线| 成人h动漫精品| 99视频精品在线| 欧美久久久久久久久中文字幕| 精品三级av在线| 一区二区三区中文免费| 国产大片一区二区| 91精品国模一区二区三区| 国产精品激情偷乱一区二区∴| 美腿丝袜亚洲一区| 欧美久久久久久蜜桃| 亚洲精品视频在线| 成人av小说网| 欧美sm极限捆绑bd| 日韩精品亚洲专区| 欧美丝袜丝nylons| 亚洲精品国产a久久久久久| 国产精品一区二区黑丝| 日韩欧美一卡二卡| 亚洲欧美日韩久久| 中文字幕高清不卡| 国产精品少妇自拍| 亚洲午夜羞羞片| 日韩av一区二| 成人激情免费视频| 久久精工是国产品牌吗| 精品国产一区二区三区久久影院| 欧美日韩国产a| 亚洲成人激情社区| 欧美视频你懂的| 一区二区三区国产精华| 91浏览器入口在线观看| 国产精品成人在线观看| 本田岬高潮一区二区三区| 亚洲国产精品高清| 成人黄色在线网站| 亚洲精品精品亚洲| 国产精品久久久久久久午夜片 | 亚洲一区二区三区爽爽爽爽爽| 色综合久久久久久久久| 中文在线一区二区| k8久久久一区二区三区| 中文字幕日韩一区| 91高清视频免费看| 奇米一区二区三区| 国产偷国产偷亚洲高清人白洁| 国产伦精品一区二区三区免费迷| 久久久影院官网| gogogo免费视频观看亚洲一| 亚洲免费资源在线播放| 欧美老年两性高潮| 国产尤物一区二区在线| 国产精品毛片久久久久久| 91久久久免费一区二区| 视频一区欧美精品| 久久精品视频网| 91麻豆产精品久久久久久| 亚洲欧美怡红院| 成人午夜伦理影院| 欧美日本免费一区二区三区| 欧美精品丝袜久久久中文字幕| 久久久久久**毛片大全| 国产98色在线|日韩| 欧美精品一区男女天堂| 久久综合色8888| 国产精品高潮呻吟久久| 91视频一区二区| 麻豆成人av在线| 亚洲天堂网中文字| 欧美一区二区三区人| 成人国产免费视频| 五月天久久比比资源色| 久久久99精品免费观看| 91国偷自产一区二区三区成为亚洲经典 | 欧美精品一区二区三区久久久| 欧美激情资源网| 国产69精品久久久久777| 亚洲最快最全在线视频| 久久综合av免费| 在线观看视频一区二区欧美日韩| 看片的网站亚洲| 夜夜精品浪潮av一区二区三区| 欧美成人午夜电影| 欧美色男人天堂| 97久久超碰国产精品电影| 精品一区二区在线观看| 亚洲最大的成人av| 中文字幕乱码日本亚洲一区二区 | 色悠悠久久综合| 久久av资源站| 香蕉久久一区二区不卡无毒影院 | 久久99国产精品成人| 亚洲一区二区三区视频在线播放| 日本一区二区三区四区在线视频| 69久久夜色精品国产69蝌蚪网| 色综合色狠狠综合色| 国产成人免费在线视频| 久久成人麻豆午夜电影| 香蕉成人啪国产精品视频综合网| 亚洲天堂精品在线观看| 国产日本欧美一区二区| 久久九九久久九九| 久久亚洲精品国产精品紫薇| 欧美顶级少妇做爰| 欧美日韩精品一区二区三区| 色猫猫国产区一区二在线视频| 国产suv精品一区二区三区| 国产一区二区三区免费| 狠狠v欧美v日韩v亚洲ⅴ| 久久精品国产一区二区| 奇米精品一区二区三区四区| 亚洲国产精品影院| 亚洲国产精品久久人人爱| 亚洲精品中文在线影院| 亚洲日本va午夜在线影院| 亚洲视频免费观看| 亚洲免费在线视频一区 二区| 亚洲视频一二三区| 亚洲精品国产一区二区三区四区在线| 欧美国产日韩在线观看| 国产精品动漫网站| 亚洲在线视频免费观看| 亚洲不卡在线观看| 美洲天堂一区二卡三卡四卡视频| 免费的国产精品| 国产高清视频一区| 成人免费视频视频| 91首页免费视频| 在线观看三级视频欧美| 这里只有精品电影| 精品国产一区二区三区av性色| 久久综合九色综合欧美亚洲| 国产视频911| 中文字幕综合网| 午夜视频一区在线观看| 激情综合网激情| 99热99精品| 3751色影院一区二区三区| 精品日韩一区二区三区免费视频| 国产欧美日韩中文久久| 亚洲免费伊人电影| 麻豆成人久久精品二区三区小说| 国产精品伊人色| 日本韩国欧美一区| 日韩一区二区三区精品视频| 国产清纯白嫩初高生在线观看91 | 欧美一级午夜免费电影| 久久久久99精品国产片| 国产精品色哟哟| 国产最新精品免费| 国产不卡高清在线观看视频| 国模冰冰炮一区二区| 成人自拍视频在线观看| 色哦色哦哦色天天综合| 日韩精品一区二区三区中文不卡 | 毛片av中文字幕一区二区| 国产+成+人+亚洲欧洲自线| 一本色道亚洲精品aⅴ| 日韩一区二区在线免费观看| 亚洲国产精品高清| 日本不卡在线视频| 91看片淫黄大片一级| 精品国产三级电影在线观看| 亚洲精品国产品国语在线app| 免费观看一级特黄欧美大片| 91在线高清观看| 久久综合视频网| 蜜臀久久99精品久久久久宅男| 成人午夜av影视| 日韩欧美成人激情| 午夜精品免费在线| 色综合久久88色综合天天6| 欧美va亚洲va| 欧美日韩成人综合天天影院| 亚洲日本一区二区| 成人免费视频网站在线观看| 欧美一区二区三区在| 亚洲精品一二三| 岛国一区二区在线观看| 欧美一区二区三区视频在线| 亚洲乱码国产乱码精品精小说| 韩国欧美国产1区| 欧美裸体一区二区三区| 亚洲免费av网站| 白白色 亚洲乱淫| 久久综合色鬼综合色| 久久99精品久久久久久国产越南 | 精品久久久久久久久久久久包黑料 | 日韩亚洲欧美在线| 亚洲综合偷拍欧美一区色| 成人a级免费电影| 欧美韩国一区二区| 国产成人免费在线视频| 国产午夜精品久久久久久久| 精品夜夜嗨av一区二区三区| 欧美一区二区三区在| 青青草精品视频| 日韩一区二区三免费高清| 天天色综合成人网| 8x福利精品第一导航|