php yii2登录实例,YII2框架中自定义用户认证模型,完成登陆和注册操作示例

YII2框架中自定义用户认证模型,完成登陆和注册操作示例,用户,自定义,模型,操作,框架

YII2框架中自定义用户认证模型,完成登陆和注册操作示例

易采站长站,站长之家为您整理了YII2框架中自定义用户认证模型,完成登陆和注册操作示例的相关内容。

本文实例讲述了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,代码如下:<?phpnamespace 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,],];

然后我们创建一个登陆页面<?phpuse yii\helpers\Url;?>

表单提交 姓名:
密码:

然后是处理用户登陆的,表单模型,在models下创建MyUserLogin.php<?phpnamespace 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); }}

最后就是我们的控制器代码<?phpnamespace 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'); } }}

演示如下:

5c3d69d8fef984ffe6bcc6de6096717b.png

875e85d712f39c25b9749a00211d3ad1.png

更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。以上就是关于对YII2框架中自定义用户认证模型,完成登陆和注册操作示例的详细介绍。欢迎大家对YII2框架中自定义用户认证模型,完成登陆和注册操作示例内容提出宝贵意见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值