手机版

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

时间:2021-09-07 来源:互联网 编辑:宝哥软件园 浏览:

注册

在高级模板中,转到front/index . PHP?r=站点/注册页面,可以看到注册页面的框架

填写用户名、电子邮件和密码后,单击注册。如果格式不正确,前端/模型/SignuForm中的rules()函数将执行初步验证。在所有格式正确后,数据被传输到前端/控制器/站点控制器中的actionSignup()函数,该函数加载用户输入的注册信息,以及前端/模型/signingup form中的signingup()函数,

以下引用的文字是解释功能中的具体细节。如果你不读,就不会影响整体。由于没有折字功能,采用引用的方法,下同

if(!$this-validate()) {返回null}注册()函数首先调用yii2/base/Model中的validate()函数进行验证。步骤1:在前端/模型/签名表单中使用rules()函数时清除错误消息。

if($ clearErrors){ $ this-clearErrors();}在第二步中,beforeValidate()函数触发beforeValidate事件并返回true。在第三步中,设置场景,默认步骤是第四步,因为这里的$ attributeNames为null。

$ AttributeNames=$ this-active Attributes();执行后返回

数组(3) { [0]=字符串(8)“用户名”[1]=字符串(5)“电子邮件”[2]=字符串(8)“密码”}

在第五步中,$this-getActiveValidators()将在前端/模型/签名表单中的规则()中获得11个验证规则,以验证validateAttributes()

步骤6:执行afterValidate()函数来触发afterValidate事件

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

让我们看看数据表用户的字段

用户已输入用户名、密码和电子邮件。Yii2框架如何生成其他字段?首先,看看password_hash。“登录自”中的“注册”功能中的密码生成是“设置密码”功能。在公共/模型/用户中,setPassword函数调用yii2/base/Security中的每个规则生成函数。

if(function _ exists(' PASSWORD _ hash '){/* * @ no inspection phpundefined constantinspection */return PASSWORD _ hash($ PASSWORD,PASSWORD_DEFAULT,[' cost '=$ cost]);}如果有,请使用password_hash函数进行加密。如果PHP没有password_hash函数,使用crypt函数进行加密。初步判断应该是兼容低于5.5的PHP版本。毕竟,password_hash函数只在高于5.5的版本中开始存在。

加密密码后,common/models/User的注册()功能会继续生成一个auth key,这是用户登录时点击“记住我”时的认证信息。

在yii2/base/Security中,身份验证密钥生成方法也是generaterandomstring,generaterandomstring调用generaterandomstring函数。如果你的PHP版本是5.2~5.6或者7,那就是用random_bytes生成一个32字节的字符串。如果没有,当您使用windows并安装了OpenSSL时,您将调用openssl_random_pseudo_bytes函数来生成它。如果您没有安装OpenSSL,您将使用mcrypt_create_iv来生成它。

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

状态在公共/模型/用户中定义

const STatus _ DELETED=0;const STATUS _ ACTIVE=10

当用户注册时,规则中的状态默认为10,而10、created_time和updated_time也会在common/models/User中的behaviors()函数中生成

用户的数据被验证为合格,加上框架生成的数据,然后存储在数据的用户表中。

登录

在前端/控制器/站点控制器中的操作注册()上

if(yii : $ app-getUser()-log in($ user)){ return $ this-goHome();}即用户注册后,用户的数据已经写入数据库,登录过程开始

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

第一步是执行beforeLogin()函数来触发beforeLogin事件。第二步是用当前用户信息替换个人信息,销毁所有cookie,然后将当前用户信息存储在session和cookie中。第三步是获取当前用户id和用户登录ip,并将其写入日志。第四步是执行afterLogin()函数,触发afterLogin事件。

最终返回真

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

版权声明:Yii2框架实现注册和登录教程是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。