Yii2框架实现注册和登录教程_php技巧

注册

在advanced模板中,进入frontend/index.php?r=site%2Fsignup页面,可以看到框架的注册页面

填写完Username、Email和Password后点击Signup后,如果格式不对,frontend/models/SignuForm中的rules()函数会进行初步验证,所有格式正确后,数据传输到 frontend/controllers /SiteController中的 actionSignup()函数中,函数加载用户输入的注册信息,在frontend/models/SignupForm中的signup()函数,

以下引用的文字为解释函数中的具体细节,不阅读不影响整体,因为没有折叠文字功能,故采用引用的方法,下同

if (!$this->validate()) {
  return null;
}

signup() 函数首先调用 yii2/base/Model中的validate() 函数进行验证
第一步,清除使用frontend/models/SignuForm中的rules()函数在用户输入时的错误信息

if ($clearErrors) {
  $this->clearErrors();
}

第二步,beforeValidate()函数触发beforeValidate事件并返回true
第三步,设置scenario,默认是default
第四步,因为这里的$attributeNames为null,

$attributeNames = $this->activeAttributes();

执行后返回

array(3) { [0]=> string(8) "username" [1]=> string(5) "email" [2]=> string(8) >"password" }

第五步,$this->getActiveValidators()会得到frontend/models/SignuForm中的rules()中11条验证规则给validateAttributes()进行验证

第六步,执行afterValidate()函数触发afterValidate事件

最后 如果所有验证都通过,$this->hasErrors()为false,所以函数最后返回true

我们看一下数据表user的字段

用户输入了username、password和email,Yii2框架是如何生成其他的字段的呢,先看password_hash,在SignupFrom中的signup函数中的密码生成是setPassword函数,该函数在common/models/User中,setPassword函数调用了yii2/base/Security中的每一条规则generatePasswordHash函数。

if (function_exists('password_hash')) {
  /** @noinspection PhpUndefinedConstantInspection */
  return password_hash($password, PASSWORD_DEFAULT, ['cost' => $cost]);
}

如果有,就使用password_hash函数进行加密,如果PHP没有password_hash函数,就使用crypt函数加密,初步判断应该是为了兼容PHP低于5.5的版本,毕竟大于5.5的版本才开始有password_hash函数

common/models/User的signup()函数在对password加密后,就会继续生成一个auth key,auth key是当用户在登录的时候点击 remember me的时候的验证信息,

auth key生成的方法也是在yii2/base/Security中的generateRandomString,generateRandomString调用generateRandomKey函数,如果你的PHP版本为是5.2~5.6或者是7,那就是用random_bytes生成一个32个字节的字符串,如果不是,当你用的系统时windows并且安装了OpenSSL,就会调用openssl_random_pseudo_bytes函数生成,如果你未安装OpenSSL,就会使用mcrypt_create_iv生成。

如果你使用的系统不是windows,就需要调用/dev/urandom,FreeBSD系统特殊,会调用/dev/random,然后调用stream_set_read_buffer方法生成8字节的字符文件,生成后,通过fread函数读取该文件中的32个字节,然后返回该数据。
password_reset_token在用户注册的时候是为空的,当用户忘记密码在登录页面点击reset it 后生成的,用来给用法发送邮件后重置密码时进行验证。

status 在common/models/User中定义的

const STATUS_DELETED = 0;
const STATUS_ACTIVE = 10;

用户注册时rules中的status默认为为10,
created_time和updated_time也是在common/models/User中的behaviors()函数中生成

用户的数据验证合格,加上框架生成的数据,然后存储进数据的user表里。

登录

关于frontend/controllers/SiteController中的actionSignup()中的

if (Yii::$app->getUser()->login($user)) {
  return $this->goHome();
}

就是用户注册后,这时该用户的数据已经写入数据库了,开始登录的过程了

登录的过程在yii2/web/User里的login()函数中

第一步,执行beforeLogin()函数触发beforeLogin事件
第二步,switchIdentity()函数把个人信息换成当前用户的信息,把所有的cookie都销毁,然后把当前用户的信息都存入到session和cookie中
第三步,获取当前用户的id和用户登录的ip,并写入到log中
第四步,执行afterLogin()函数触发afterLogin事件

最后 返回true

判断登录成功后,return $this->goHome();跳转到主页。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索yii框架实现登陆
yii框架教程
yii框架实现ajax分页、yii框架实现签到功能、yii2 实现单点登录、yii2 basic 登录实现、ssh框架实现用户登录,以便于您获取更多的相关知识。

时间: 2024-11-08 22:33:16

Yii2框架实现注册和登录教程_php技巧的相关文章

Yii2框架整合Xunsearch搜索引擎的方法_php技巧

本文实例讲述了Yii2框架整合Xunsearch搜索引擎的方法.分享给大家供大家参考,具体如下: 公司一直用的YII2框架,然后要做一个中文搜索引擎,所有想的Xunsearch这个项目,之前有文章提到了,怎么安装Xunsearch服务端.(参考<PHP在innodb引擎下快速代建全文搜索功能简明教程>) xunsearch暂时只有Liunx的服务端和PHP-SDK.但作者确提供了一个YII2的扩展.突然感觉好幸福的说. 本来是通过使用PHP-SDK写一个简单的添加索引和更新索引还有删除索引的功

PHP开发环境配置(MySQL数据库安装图文教程)_php技巧

一. MySQL的安装 运行MYSQL安装程序(mysql-essential-5.1.40-win32.msi) 开发环境配置(MySQL数据库安装图文教程)_php技巧-mysql数据库主从配置">   选择安装类型为Custom   点选Change按钮更改安装目录   将安装目录更改为到D盘(可根据自己的系统更改)     点击Install按钮开始安装   安装程序将开始安装MySQL到指定的路径中     安装过程中汇出现一些广告点Next跳过即可.     安装完成后出现以下

Yii2框架使用计划任务的方法_php实例

本文实例讲述了Yii2框架使用计划任务的方法.分享给大家供大家参考,具体如下: <?php namespace console\controllers; use yii\console\Controller; /** * Test controller */ class TestController extends Controller { public function actionIndex() { echo "cron service runnning"; } public

浅析Yii2 GridView实现下拉搜索教程_php实例

废话不多说了,先给大家展示下效果图,如果大家还很满意请继续往下阅读: 具体怎么实现喃?考虑到一张数据表要下拉效果的字段可能有很多个,我们先在其model中实现一个方法方便后续操作 /** * 下拉筛选 * @column string 字段 * @value mix 字段对应的值,不指定则返回字段数组 * @return mix 返回某个值或者数组 */ public static function dropDown ($column, $value = null) { $dropDownLis

PHP的Yii框架中Model模型的学习教程_php技巧

模型是 MVC 模式中的一部分, 是代表业务数据.规则和逻辑的对象. 模型是 CModel 或其子类的实例.模型用于保持数据以及与其相关的业务逻辑. 模型是单独的数据对象.它可以是数据表中的一行,或者一个用户输入的表单. 数据对象的每个字段对应模型中的一个属性.每个属性有一个标签(label), 并且可以通过一系列规则进行验证. Yii 实现了两种类型的模型:表单模型和 Active Record.二者均继承于相同的基类 CModel. 表单模型是 CFormModel 的实例.表单模型用于保持

Yii2 rbac权限控制操作步骤实例教程_php实例

本篇的主题是 rbac权限控制的详细操作步骤,注意是操作步骤哦,关于配置与rbac的搭建,我们在yii2搭建完美后台并实现rbac权限控制实例教程说的再清楚不过了. 但是,在很多人的反馈下,说是完全按照本主的步骤来的,丝毫不差,为啥菜单不显示,为啥不显示呢不显示?艾玛,最终在群里帮人调试的时候找到原因了,si分的不容易啊.原因就是你学会了搭建没学会操作啊,啊,啊,我们今天就来详细的说说这rbac的权限控制具体怎么操作!当然,大前提下是你已经按照我们上文成功搭建一套完美的后台并实现了rbac权限控

yii2框架 操作 mongodb 数据库实例教程

一:安装yii2  关于安装yii2我们就不??铝耍?故抢??omposer安装下载,我们可以安装basic 模版 composer global require "fxp/composer-asset-plugin:~1.0.3" composer create-project --prefer-dist yiisoft/yii2-app-basic basic 或者是advanced composer global require "fxp/composer-asset-

PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程_php技巧

PHP+Ajax检测用户名或邮件注册时是否已经存在是论坛或会员系统中常见的一个重要功能.本文就以实例形式简单描述这一功能的实现方法.具体步骤如下: 一.PHP检测页面 check.php页面代码如下: <script type="text/javascript" src="jiance.js"></script> <form name="myform" action="" method="

php实现最简单的MVC框架实例教程_php技巧

本文以一个实例的形式讲述了PHP实现MVC框架的过程,比较浅显易懂.现分享给大家供大家参考之用.具体分析如下: 首先,在学习一个框架之前,基本上我们都需要知道什么是mvc,即model-view-control,说白了就是数据控制以及页面的分离实现,mvc就是这样应运而生的,mvc分为了三个层次,而且三个层次各司其职,互不干扰,首先简单介绍下,各个层次:view即是视图,也就是web页面,control即是控制器 向系统发出指令的工具,model 简单说是从数据库中取出数据进行处理. MVC的工