一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - YII2框架中自定義用戶認證模型,完成登陸和注冊操作示例

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

2020-06-08 14:22懷素真 PHP教程

這篇文章主要介紹了YII2框架中自定義用戶認證模型,完成登陸和注冊操作,結(jié)合實例形式分析了YII2通過自定義用戶認證模型完成登陸和注冊相關(guān)操作步驟與實現(xiàn)技巧,需要的朋友可以參考下

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

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

用戶表結(jié)構(gòu)如下,當然可以根據(jù)自已的需要添加或刪除:

?
1
2
3
4
5
6
7
8
9
10
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下創(chuàng)建MyUser.php,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
 
namespace app\models;
 
use YII;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;
 
//我們自定義自已的用戶操作模型,需要實現(xiàn)IdentityInterface接口中的全部方法
//我們自定義的模型主要實現(xiàn)的是認證邏輯,而yii\web\User是負責管理用戶認證狀態(tài)的,兩者是有區(qū)別的。
class MyUser extends ActiveRecord implements IdentityInterface
{
  //指定操作的表名
  public static function tableName()
  {
    return '{{%user}}';
  }
 
  //通過ID,返回用戶實例
  public static function findIdentity($id)
  {
    return static::findOne($id);
  }
 
  //通過令牌,返回用戶實例,一般用于無狀態(tài)的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);
  }
}

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

?
1
2
3
4
5
6
7
'components' => [
    // ...
    'user' => [
        'identityClass' => 'app\models\MyUser',
        'enableAutoLogin' => true,
    ],
];

然后我們創(chuàng)建一個登陸頁面

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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下創(chuàng)建MyUserLogin.php

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?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();
      //監(jiān)聽事件,登陸前,重新生成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);
  }
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?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');
    }
  }
}

演示如下:

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

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

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

原文鏈接:https://www.cnblogs.com/jkko123/p/8665496.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本wwxx护士 | 国产精品边做边接电话在线观看 | 9420高清完整版在线观看国语 | 日本加勒比在线精品视频 | s8sp加密路线和免费路线首页 | jiuse在线| 亚洲人成影院午夜网站 | 日韩国产成人精品视频人 | 日韩xx00| 四虎影视永久在线观看 | 狠狠色综合久久婷婷 | 色天天色综合 | 国产综合图区 | 好大好硬好深好爽想要之黄蓉 | 欧美xxxxx九色视频免费观看 | 三级午夜宅宅伦不卡在线 | 午夜影院0606免费 | 日老逼 | 国产一区二区三区久久精品 | 国产一级在线观看 | 99爱视频| 大胸纲手被羞羞漫画网站 | 亚洲男1069gay男猛男 | xxoo做爰猛烈动态 | 精品精品国产yyy5857香蕉 | 欧美日韩中文字幕在线视频 | 午夜精品久久久久久久2023 | 欧美又大又粗又长又硬 | 日韩精品视频免费 | 亚洲无总热门 | 91麻豆精品国产自产在线观看 | 国产成人综合一区人人 | 超级乱淫伦短篇小说做车 | 9999热视频 | 亚洲国产精品无码中文字幕 | a黄色| 欧美日韩免费一区二区在线观看 | 精品久久久久久亚洲 | 精品久久久久久影院免费 | 日本护士撒尿xxxx18 | 黄色大片网|