亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Yii2 用戶登錄

2019-11-15 02:18:40
字體:
來源:轉載
供稿:網友
Yii2 用戶登錄

在Yii2的basic版本中默認是從一個數組驗證用戶名和密碼,如何改為從數據表中查詢驗證呢?且數據庫的密碼要為哈希加密密碼驗證?

下面我們就一步一步解析Yii2的登錄過程。

一. 創建user表模型

表結構如下:

CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `pid` int(11) NOT NULL DEFAULT '0' COMMENT '父id',  `username` char(70) NOT NULL COMMENT '用戶名',  `passWord` char(70) NOT NULL COMMENT '密碼',  `type` tinyint(4) NOT NULL DEFAULT '4' COMMENT '類型(1:總店,2:門店,3:管理員)',  `created_time` int(11) NOT NULL COMMENT '注冊時間',  `updated_time` int(11) NOT NULL COMMENT '修改時間',  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '封禁狀態,0禁止1正常',  `login_ip` char(20) NOT NULL COMMENT '登錄ip',  `login_time` int(11) NOT NULL COMMENT '上一次登錄時間',  `login_count` int(10) NOT NULL DEFAULT '0' COMMENT '登陸次數',  `update_password` int(10) NOT NULL DEFAULT '0' COMMENT '修改密碼次數',  PRIMARY KEY (`id`),  KEY `pid` (`pid`),  KEY `username` (`username`),  KEY `type` (`type`),  KEY `status` (`status`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='登錄管理表';

使用Gii創建user模型

將Yii2 basic之前user模型代碼導入現在user中(先備份之前basic中的user模型)

  1 namespace app/models;  2   3 use Yii;  4   5 /**  6  * This is the model class for table "user".  7  *  8  * @property integer $id  9  * @property integer $pid 10  * @property string $username 11  * @property string $password 12  * @property integer $type 13  * @property integer $created_time 14  * @property integer $updated_time 15  * @property integer $status 16  * @property string $login_ip 17  * @property integer $login_time 18  * @property integer $login_count 19  * @property integer $update_password 20  */ 21 class User extends /yii/db/ActiveRecord  implements /yii/web/IdentityInterface  22 {   public $authKey; 23    /*public $id; 24     public $username; 25     public $password; 26     public $authKey; 27     public $accessToken; 28  29     private static $users = [ 30         '100' => [ 31             'id' => '100', 32             'username' => 'admin', 33             'password' => 'admin', 34             'authKey' => 'test100key', 35             'accessToken' => '100-token', 36         ], 37         '101' => [ 38             'id' => '101', 39             'username' => 'demo', 40             'password' => 'demo', 41             'authKey' => 'test101key', 42             'accessToken' => '101-token', 43         ], 44     ]; 45 */ 46  47     /** 48      * @inheritdoc 49      */ 50     public static function tableName() 51     { 52         return 'user'; 53     } 54  55     /** 56      * @inheritdoc 57      */ 58     public function rules() 59     { 60         return [ 61             [['pid', 'type', 'created_time', 'updated_time', 'status', 'login_time', 'login_count', 'update_password'], 'integer'], 62             [['username', 'password', 'created_time', 'updated_time', 'login_ip', 'login_time'], 'required'], 63             [['username', 'password'], 'string', 'max' => 70], 64             [['login_ip'], 'string', 'max' => 20] 65         ]; 66     } 67  68     /** 69      * @inheritdoc 70      */ 71     public function attributeLabels() 72     { 73         return [ 74             'id' => 'ID', 75             'pid' => 'Pid', 76             'username' => 'Username', 77             'password' => 'Password', 78             'type' => 'Type', 79             'created_time' => 'Created Time', 80             'updated_time' => 'Updated Time', 81             'status' => 'Status', 82             'login_ip' => 'Login Ip', 83             'login_time' => 'Login Time', 84             'login_count' => 'Login Count', 85             'update_password' => 'Update Password', 86         ]; 87     } 88  89     /** 90      * @inheritdoc 91      */ 92     public static function findIdentity($id) 93     { 94         return static::findOne($id); 95         //return isset(self::$users[$id]) ? new static(self::$users[$id]) : null; 96     } 97  98     /** 99      * @inheritdoc100      */101     public static function findIdentityByAccessToken($token, $type = null)102     {103         return static::findOne(['access_token' => $token]);104         /*foreach (self::$users as $user) {105             if ($user['accessToken'] === $token) {106                 return new static($user);107             }108         }109 110         return null;*/111     }112 113     /**114      * Finds user by username115      *116      * @param  string      $username117      * @return static|null118      */119     public static function findByUsername($username)120     {121           $user = User::find()122             ->where(['username' => $username])123             ->asArray()124             ->one();125 126             if($user){127             return new static($user);128         }129 130         return null;131         /*foreach (self::$users as $user) {132             if (strcasecmp($user['username'], $username) === 0) {133                 return new static($user);134             }135         }136 137         return null;*/138     }139 140     /**141      * @inheritdoc142      */143     public function getId()144     {145         return $this->id;146     }147 148     /**149      * @inheritdoc150      */151     public function getAuthKey()152     {153         return $this->authKey;154     }155 156     /**157      * @inheritdoc158      */159     public function validateAuthKey($authKey)160     {161         return $this->authKey === $authKey;162     }163 164     /**165      * Validates password166      *167      * @param  string  $password password to validate168      * @return boolean if password provided is valid for current user169      */170     public function validatePassword($password)171     {172         return $this->password === $password;173     }174 }

之前的basic中User模型是繼承了/yii/base/Object,為什么要繼承這個類,那是因為

 1 #在/yii/base/Object中,有構造方法 2  public function __construct($config = []) 3     { 4         if (!empty($config)) { 5             Yii::configure($this, $config); 6         } 7         $this->init(); 8     }    9 #繼續追蹤Yii::configure($this, $config)代碼如下 10 public static function configure($object, $properties)11     {12         foreach ($properties as $name => $value) {13             $object->$name = $value;14         }15 16         return $object;17     }18 #正是因為有這兩個方法,所以在User.php中19 public static function findByUsername($username)20     {21         foreach (self::$users as $user) {22             if (strcasecmp($user['username'], $username) === 0) {23                 return new static($user);24             }25         }26 27         return null;28     }29 #將$user傳遞過來,通過static,返回一個User的實例。

當通過數據表查詢時候沒有必要再繼承/yii/base/Object,因為不必為類似原來類變量賦值了。這個時候需要User模型繼承/yii/db/ActiveRecord,因為要查詢用。

findIdentity是根據傳遞的id返回對應的用戶信息,getId返回用戶id,getAuthKey和validateAuthKey是作用于登陸中的--記住我。這個authKey是唯一的,當再次登陸時,從cookie中獲取authKey傳遞給validateAuthKey,驗證通過,就登陸成功。

二. 模擬用戶數據登錄

插入一條用戶模擬數據

INSERT INTO `user` (`username`, `password`) VALUES ('admin', '123')

控制器Controller

 1     /** 2      * 登錄 3      */ 4     public function actionLogin() { 5          if (!/Yii::$app->user->isGuest) { 6             return $this->goHome(); 7         } 8  9         $model = new LoginForm(); 10         if ($model->load(Yii::$app->request->post()) && $model->login()) {11             12           13             $this->redirect(array('charisma/index'));14         } else {15             return $this->render('login', [16                         'model' => $model,17             ]);18         }19     }

veiws中的login.php

 1 <div class="well col-md-5 center login-box"> 2                         <div class="alert alert-info"> 3                             請填寫您的用戶名和密碼 4                         </div> 5                          6                         <?php $form = ActiveForm::begin([ 7                               'id' => 'login-form', 8
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩人人澡狠狠躁视频| 欧美裸体视频网站| 中文字幕日韩在线视频| 亚洲国产精品成人av| 亚洲男人天堂古典| 日韩在线精品视频| 久久夜色精品亚洲噜噜国产mv| 国产专区欧美专区| 亚洲精品自拍偷拍| 亚洲已满18点击进入在线看片| www国产91| 欧美一级片一区| 97在线看免费观看视频在线观看| 久久亚洲欧美日韩精品专区| 国产精品日韩专区| 亚洲国产高清福利视频| 91精品国产综合久久男男| 亚洲第一福利网站| 亚洲国产免费av| 国产99视频精品免视看7| 日韩欧美在线中文字幕| 欧美成aaa人片在线观看蜜臀| 尤物99国产成人精品视频| 亚洲欧美日韩视频一区| 正在播放欧美一区| 成人xxxxx| 51午夜精品视频| 久久国产精品网站| 欧美成人精品在线视频| 成人精品久久久| 综合国产在线视频| 欧美成人激情图片网| 国产欧美一区二区三区在线看| 国产精品成人va在线观看| 亚洲第一页在线| 国产成人精品一区二区在线| 亚洲第一天堂av| 亚洲激情免费观看| 日韩综合中文字幕| 欧美日韩精品在线播放| 国产va免费精品高清在线观看| 成人精品一区二区三区电影免费| 日韩精品免费在线观看| 91chinesevideo永久地址| 亚洲最大成人网色| 国产精品激情自拍| 欧美性生活大片免费观看网址| 久久精品影视伊人网| 亚洲国产精品悠悠久久琪琪| 亚洲女人被黑人巨大进入| 黑人极品videos精品欧美裸| 欧美成人激情在线| 中日韩美女免费视频网址在线观看| 国产在线播放91| 国产999精品久久久影片官网| 国产在线观看91精品一区| 欧美亚洲在线播放| 疯狂做受xxxx欧美肥白少妇| 欧美激情一区二区三级高清视频| 国产在线视频欧美| 日韩av在线直播| 成人免费观看a| 91成人性视频| 欧美激情女人20p| 亚洲一区二区久久久久久久| 插插插亚洲综合网| 久久久久久久国产| 欧美老肥婆性猛交视频| 国产精品色视频| 成人精品久久久| 中文字幕亚洲综合| 精品性高朝久久久久久久| 午夜精品久久久久久久99热浪潮| 国产精品www色诱视频| 欧美国产日韩精品| 亚洲aⅴ日韩av电影在线观看| 亚洲深夜福利视频| 欧美日韩国产一区中文午夜| 日韩中文字幕免费| 午夜精品久久久久久久男人的天堂| 国产欧美亚洲视频| 中文字幕欧美日韩va免费视频| 国产精品海角社区在线观看| 中文字幕国产亚洲| 国产91ⅴ在线精品免费观看| 亚洲国产精品va在线| 78色国产精品| 97精品国产97久久久久久免费| 51色欧美片视频在线观看| 欧美在线观看网站| 欧美日韩免费在线| 欧美国产中文字幕| 久久国产精品视频| 欧美激情精品久久久久久免费印度| 91精品国产色综合| 亚洲精品国偷自产在线99热| 国产精品美女网站| 日韩av成人在线观看| 亚洲成av人乱码色午夜| 亚洲人成人99网站| 91国产精品视频在线| 激情亚洲一区二区三区四区| 欧美日韩国产中字| www高清在线视频日韩欧美| 亚洲自拍中文字幕| 日韩电影中文字幕在线| 欧美日韩一区二区三区在线免费观看| 亚洲天堂av综合网| 成人黄色免费看| 国产一区二区三区在线观看视频| 欧美一区二粉嫩精品国产一线天| 国产精品久久一区| 欧美激情久久久久久| 国产一区二区在线免费| 欧美日韩国产精品一区| 国产精品视频公开费视频| 亚洲欧美在线播放| 国产视频欧美视频| 大桥未久av一区二区三区| 亚洲视频在线观看视频| 久久香蕉国产线看观看av| 亚洲欧美日韩天堂一区二区| 在线观看成人黄色| 色综合影院在线| 亚洲黄色在线看| 亚洲男人天堂2019| 欧美一区深夜视频| 国产一区视频在线| 国产亚洲福利一区| 日韩视频欧美视频| 午夜精品在线视频| 欧美日韩中文在线| 欧美成人中文字幕| 亚洲精品免费在线视频| 国产精品色悠悠| 国产99视频精品免视看7| 欧美大学生性色视频| 欧美日韩美女视频| 日韩精品免费在线观看| 国产视频精品久久久| 国产欧美在线观看| 欧美日韩综合视频| 国产日产久久高清欧美一区| 欧美日韩爱爱视频| 亚洲在线视频福利| 欧美华人在线视频| 久久韩国免费视频| 伊人久久免费视频| 国产精品久久久久久av下载红粉| 国产一区二区成人| 国产剧情日韩欧美| 国产精品入口免费视频一| 国产精品久久久av久久久| 亚洲精品国精品久久99热| 日韩黄在线观看| 日本久久亚洲电影| 国产精品一二三在线| 欧美日韩裸体免费视频| 日韩免费看的电影电视剧大全| 日韩中文字幕第一页| 91久久久久久久久久久久久| 国产精品欧美久久久| 欧美电影第一页| 丝袜一区二区三区|