php yii2验证密码登录,Yii2如何实现用户登陆

本文介绍了如何在Yii2基础版中实现动态密码验证登录。通过创建user表,修改models/User.php中的验证逻辑,实现了User::validatePassword方法自定义密码验证,并提供了两种密码验证方式。此外,还创建了models/Users.php来简化代码。

这两天空的时候,看了下Yii2,然后按照官方教程,安装了Yii2基础版。最开始的问题,无非就是注册登陆等功能了,果然,Yii2基础版并不像高级版一样,可以直接导入创建好的数据库,只有的静态登陆模型。然后简单修改了下,实现动态登陆,在这里记录下。

一、Yii2基础版的登录思路

1、登录表单--》执行controller、action--》调用$model->load()=》调用$model->login()($model->login()来自于LoginForm)

2、$this->validate()验证,也就是基础的rule验证,rule验证中带有validatePassword验证,即会执行User::validatePassword()

3、验证通过,返回用户对象,验证失败,返回错误。

二、简单看了下Yii2的登录流程,知道怎么做了,那就开始动手修改吧。

按照需求创建user用户表

CREATE TABLE `user` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`username` varchar(32) NOT NULL,

`email` varchar(32) NOT NULL,

`password` varchar(32) NOT NULL,

`authKey` varchar(100) NOT NULL DEFAULT '',

`accessToken` varchar(100) NOT NULL DEFAULT '',

PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

注:你需要先配置好数据库连接,确保能正确连接数据库。以上字段可以根据你需求进行扩充,这里仅作演示使用。

三、修改登录时候的部分逻辑调用

通过第一步看清楚Yii2基础版的思路,它是调用的静态数组来验证的,我们要修改成动态的,Yii2对用户的验证调用都放在models/User.php下面,那么,我们就修改这个文件,代码如下:

namespace app\models;

use Yii;

class User extends \yii\base\Object implements \yii\web\IdentityInterface {

public $id;

public $username;

public $email;

public $password;

public $status;

public $authKey;

public $accessToken;

//public $created_at;

//public $updated_at;

/**

* @inheritdoc

*/

public static function findIdentity($id) {

$user = self::findById($id);

if ($user) {

return new static($user);

}

return null;

}

/**

* @inheritdoc

*/

public static function findIdentityByAccessToken($token, $type = null) {

$user = Users::find()->where(array('accessToken' => $token))->one();

if ($user) {

return new static($user);

}

return null;

}

/**

* Finds user by username

*

* @param  string      $username

* @return static|null

*/

public static function findByUsername($username) {

$user = Users::find()->where(array('username' => $username))->one();

if ($user) {

return new static($user);

}

return null;

}

public static function findById($id) {

$user = Users::find()->where(array('id' => $id))->asArray()->one();

if ($user) {

return new static($user);

}

return null;

}

/**

* @inheritdoc

*/

public function getId() {

return $this->id;

}

/**

* @inheritdoc

*/

public function getAuthKey() {

return $this->authKey;

}

/**

* @inheritdoc

*/

public function validateAuthKey($authKey) {

return $this->authKey === $authKey;

}

/**

* Validates password

*

* @param  string  $password password to validate

* @return boolean if password provided is valid for current user

* 在创建用户的时候,也需要对密码进行操作

*/

public function validatePassword($password) {

//方法一:使用自带的加密方式

return $this->password === md5($password);

//方法二:通过YII自带的验证方式来验证hash是否正确

//return Yii::$app->getSecurity()->validatePassword($password, $this->password);

}

}

从以上代码可以看出,我们只是修改了对用户表的操作调用,密码对比,ValidatePassword($password)方法中,就是密码验证,你可以写自己的密码加密验证方式,也可以使用Yii自带的加密验证方式。(无论你使用哪种密码验证方式,当你创建用户的时候,也需要使用这种加密验证方式哦)

四、创建User::调用

为了让代码干净一点,我创建了models/Users.php,因为Users::需要使用

$user = Users::find()->where(array('accessToken' => $token))->one();

models/Users.php代码如下:

/*

* 用户表

*/

namespace app\models;

use yii\db\ActiveRecord;

use Yii;

class Users extends \yii\db\ActiveRecord {

/**

* @return string 返回该AR类关联的数据表名

*/

public static function tableName() {

return 'user';

}

}

备注:如果你不想创建多余的Users.php文件,你还可以使用其他方法,当然,代码稍微不同,这里就不详细讲解

1、你可以直接让User.php继承\yii\db\ActiveRecord。继承代码如下

namespace app\models;

class User extends /*\yii\base\Object*/ \yii\db\ActiveRecord implements \yii\web\IdentityInterface

2、你甚至可以使用Yii2的基础SQL查询

到这里,就完成了Yii2基础版的登录注册了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值