Yii 用户身份验证

[Adaptive Autosar]深入理解--Time Synchronization 目录 1.TS典型应用场景 2.CP和AP时间同步对比 3.时间同步基础知识 4.TBR部分参数说明 5. TS功能说明 5.1 基本说明 5.2 时间纠正计算说明 5.3 时间验证 Time Synchronization 时间同步,后面简称TS 1.TS典型应用场景 时间同步,典型应用就是在自动驾驶领域,自动驾驶领域涉及到各个传感器的数据采集,如IMU采集当前车身姿态和运动信息,毫米波雷达-超声波雷达-环视摄像头-前视摄像头...等等传感器捕获的数据,在算法中需要精确知道每个数. 阅读详情

Yii 生成应用时已经提供了最基础的用户登陆机制。我们用 Yii 生成一个新的应用,进入 protected/components 目录,我们可以看到 UserIdentity.php 文件,里面的 UserIdentity 类里面只有一个 public 函数如下:

public function authenticate()
{
	$users=array(
		// username => password
		'demo'=>'demo',
		'admin'=>'admin',
	);
	if(!isset($users[$this->username]))
		$this->errorCode=self::ERROR_USERNAME_INVALID;
	elseif($users[$this->username]!==$this->password)
		$this->errorCode=self::ERROR_PASSWORD_INVALID;
	else
		$this->errorCode=self::ERROR_NONE;
	return !$this->errorCode;
}

     这个类在 components 里面,会在应用一开始的时候就加载,用于最基础的用户验证,可以看到,该函数一开始只是简单地定义了两个用户 demo 和 admin,而密码也只是 demo 和 admin,如果所以如果你的用户很有限的话,可以直接在这里面修改添加用户就行,多的话我们后面再说。函数下面的 if else 分别是用于检查用户名和密码是否有效,出错的时候生成 ERROR_USERNAME_INVALID,ERROR_PASSWORD_INVALID 这些错误。总的来说,这里进行了真正的用户名密码验证,并进行登陆后的基本逻辑处理。

     单看这个类还是看不出登陆控制流程的。遵循 Model/ Control/ View 的原则,我们可以看到登陆流程在这三方面的体现。首先进入 Models 文件夹,你可以看到一个 LoginForm 的类文件,这个类继承了 CFormModel ,为表单模型的派生类,封装了关于登陆的数据及业务逻辑。比较核心的函数如下:


/**
 * Authenticates the password.
 * This is the 'authenticate' validator as declared in rules().
 */
public function authenticate($attribute,$params)
{
	$this->_identity=new UserIdentity($this->username,$this->password);
	if(!$this->_identity->authenticate())
		$this->addError('password','用户名或密码错误');
}

/**
 * Logs in the user using the given username and password in the model.
 * @return boolean whether login is successful
 */
public function login()
{
	if($this->_identity===null)
	{
		$this->_identity=new UserIdentity($this->username,$this->password);
		$this->_identity->authenticate();
	}
	if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
	{
		$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
		Yii::app()->user->login($this->_identity,$duration);
		return true;
	}
	else
		return false;
}



    这里的 authenticate 利用 UserIdentity 类对用户名密码进行验证,而 login 函数通过检测用户身份是否已经设置及错误码是否为空,最后进行 Yii 提供的 login 函数进行登陆。$duration 可以设置身份的有效期。

    再看 Control,在 siteControler 里面有一个 action 是关于登录的,就是 actionLogin, 函数如下:


/**
 * Displays the login page
 */
public function actionLogin()
{
	if (!defined('CRYPT_BLOWFISH')||!CRYPT_BLOWFISH)
		throw new CHttpException(500,"This application requires that PHP was compiled with Blowfish support for crypt().");

	$model=new LoginForm;

	// if it is ajax validation request
	if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
	{
		echo CActiveForm::validate($model);
		Yii::app()->end();
	}

	// collect user input data
	if(isset($_POST['LoginForm']))
	{
		$model->attributes=$_POST['LoginForm'];
		// validate user input and redirect to the previous page if valid
		if($model->validate() && $model->login())
			$this->redirect(Yii::app()->user->returnUrl);
	}
	// display the login form
	$this->render('login',array('model'=>$model));
}



    该 login 的 action 是基于 LoginForm 将 POST 的表单进行验证登陆或者渲染一个新的登录页面。

     最后, view 的文件是 site 文件夹的 login.php ,这就是你所看到的登陆界面了。


    梳理一下,我们可以清楚地看到 Yii 的用户登陆逻辑处理,当你在 login 界面输入用户名密码之后,表单将数据 POST 到 site/login 的动作,loign 实例化了一个 LoginForm 表单模型,并根据 model 里面的 validate 函数 和 login 函数 进行登陆检测,validate 会根据 rule 的规则验证表单数据,其中 password 的验证需要 authenticate 函数,而 authenticate 和 login 函数的验证都是基于 UserIdentity 的 authenticate 函数。所以,如果我们更改登录的逻辑,LgoinForm 和 loginaction 都可以不用修改,直接改 UserIdentity 的 authenticate 函数就基本可以了。


     以上的分析是 Yii 自动生成的关于用户登陆的逻辑处理代码,看起来已经很像样了不是吗?但我们的系统一般要支持很多用户访问,在代码里简单地罗列用户名和密码明显是不理智的,更为成熟的当然是请数据库来帮我们管理。假设我们在自己的数据库里面按下面的 Mysql 语句创建一个 admin 的表:


drop table if exists `admin`;
create table `admin` (
	`admin_id` int unsigned not null auto_increment comment '主键',
	`username` varchar(32) not null comment '登录名',
	`psw` char(40) not null comment '登录密码(两次sha1)',
	`nick` varchar(64) not null comment '昵称',
	`add_time` datetime not null comment '创建时间',
	`login_time` datetime null comment '最近登录时间',
	unique key(`username`),
	primary key (`admin_id`)
) engine=innodb default charset=utf8 comment='管理员表';

    Mysql 建表完成后我们就用 gii 生成 admin 的 Model,然后我们可以回到我们最初 Component 里面的 UserIdentity.php 重写 authenticate 函数来实现我们自己的用户名密码验证。为了安全起见,密码采用两次 sha1 加密,所以将采集到的密码两次 sha1 加密,然后在我们创建的 Admin 里面查找是否存在与表单输入的 username 对应的用户,然后比对加密过的密码,如果都通过后就可以把这个用户的常用信息由 setState 函数设置为 Yii 的 user 的用户字段,比如 $this->setState('nick', $user->nick); 这一句之后,以后可以直接通过 Yii:app()->user->nick 来访问当前登陆用户的昵称,而不用去查询数据库。而 $user->login_time = date('Y-m-d H:i:s'); 是进行更新用户登陆时间,并通过下一句的 save 保存到数据库中。

public function authenticate()
{
	if(strlen($this->password) > 0)
		$this->password = sha1(sha1($this->password));
	$user = Admin::model()->findByAttributes(array('username' => $this->username));
	if($user == null)
		$this->errorCode=self::ERROR_USERNAME_INVALID;
	elseif( !($user instanceof Admin) || ($user->psw != $this->password) )
		$this->errorCode=self::ERROR_PASSWORD_INVALID;
	else
	{
		$this->setState('admin_id', $user->admin_id);
		$this->setState('nick', $user->nick);
		$this->setState('username', $user->username);
		$user->login_time = date('Y-m-d H:i:s');
		$user->save();
		$this->errorCode=self::ERROR_NONE;
	}
	return !$this->errorCode;
}

    而如果你想要修改登陆的界面,那就进入 view 里面 site 文件夹中的 login.php ,尽情地折腾让它变成你想要的样子,这样我们自己的登陆流程也完成了。有了 Yii 是不是方便极了~


Ps:为什么觉得很简单的东西写起来这么累.....

【原创】关于西门子S120 的电气图纸设计 我们首先要了解一下模块的基本信息:SINAMICS 功率模块 PM240-2 三相交流380-480V+10/-10% 47-63Hz;至此,我们选择的驱动系统配置的资料都已经查找完毕,接下来就是根据每个部件的功能接口和我们需要实现的功能画出接线连接图,这样关于伺服电机控制,硬件部分设计就完成了。2)FSA - FSC 型功率模块 PM240-2 的屏蔽连接板外形尺寸图,所有数据以毫米(英寸)为单位。1)FSA 型功率模块 PM240-2 的外形尺寸图,所有数据以毫米(英寸)为单位。 阅读详情

相关推荐

5G协议栈逆向工程:基于开源模拟器的核心网信令分析实战

本文详细介绍了基于开源模拟器Free5GC和UERANSIM的5G协议栈逆向工程实战,涵盖核心网信令分析、环境搭建、认证协议解析及安全漏洞验证。通过NGAP/NAS信令交互解密和异常流量注入测试,帮助研究人员深入理解5G网络安全机制,并提供实用的安全加固建议。

weixin_29250573的博客 676

YII登录过程简单总结

用户的登录、过程是一个比较费劲的事,还在Yii提供了组建支持,熟练的使用该组件,在开发中可以大大的减少时间。 在siteController中有如下actionLogin() if ($isGuest){ $model=new LoginForm; if(isset($_POST['ajax']) && $_POST['ajax']==='login-form') {

fuyungeili的专栏 664

金融领域强化学习在多资产类别动态交易执行中的应用

在金融市场中,多资产类别的交易执行面临着诸多挑战,如市场的不确定性、资产间的复杂相关性等。传统的交易策略往往难以适应动态变化的市场环境。本研究的目的在于探索如何运用强化学习技术,实现多资产类别在动态市场环境下的高效交易执行。具体范围涵盖了从强化学习的基本原理到在多资产交易场景中的实际应用,包括核心算法的实现、数学模型的构建以及项目实战等方面。本文首先介绍研究背景,包括目的、预期读者和文档结构。接着阐述核心概念,包括强化学习和多资产类别动态交易执行的原理及其联系。

AI 领航者的博客 630

Yii 的Yii::app()->user->id使用方法

使用Yii::app()->user->getId()时会返回用户名(如test),可我们为了使用方便可能更希望返回的是用户的id,所以有了下面的改写。

xujing19920814的博客 5023

恶意代码实验3:Word宏病毒实验

只要下次打开这个word文档,就会执行以上代码,并将自身复制到Normal.dot(word文档的公共模板)和当前文档的ThisDocument中,同时改变函数名(模板中为Document_Close,当前文档为Document_Open),此时所有的word文档打开和关闭时,都将运行以上的病毒代码,可以加入适当的恶意代码,影响word的正常使用,本例中只是简单的跳出一个提示框。回答不正确三次,即可自动跳出病毒程序,但那时已经出现几十个文档。1、打开的宏编辑器如图所示,即可编写病毒代码。

qq_63949327的博客 6505

深度强化学习系列(13): 策略梯度(Policy Gradient)

对于DQN来说使用一个网络直接逼近了值函数,最后取得了非常不错的效果, 但是对于一些连续性控制或者动作空间特别大的环境来说,很难全部计算所有的值函数来得到最好的策略,那么直接计算策略的方法就别提出来了。 回顾一下前面几篇,所谓的策略,其实就是状态到动作的映射数学表达为 π:s→aπ:s→a\pi : s \to a, 我们用ττ\tau 表示状态s到最后一个状态的一个序列,表示为: τ:st...

深度强化学习(DeepRL)探索博客 4642

yii2实际使用

1.获取数据 $post=Yii::$app->request->post(); 2.获取当前用户身份实例 使用表达式Yii::$app->user->identity检测当前用户身份。它返回 一个表示当前登录用户的认证类identity class的实例, 未认证用户(游客)则返回 null。 // 当前用户的身份实例。未认证用户则为 Null 。 $identity= Yii::$app-&gt...

zxy15538191283的博客 1236

【科研学习】Demo3D2015安装包以及图文安装步骤

安装包 点击下图的.exe文件,安装 不需要解压,打开注册机 如下图: 点击上图的.exe文件,出现下图 先点击 patch 打开安装目录下的Demo3D.licensing.dll文件,然后点击Generate,生成dvt-license文件,保存即可 打开安装完成的Demo3D 2015(64-bit),一般破解没完成的,会出现一个request a license 的问题,点击find license 的那一行 点击后找到自己Generate,生成dvt

KaelCui的博客 1万+

Yii user组件使用与初看

想要实现的需求(从哪里来?) 目的:Yii使用Yii::$app->user->id获取用户的user_id,它是从session中或者cookie中获取的,因为我们现在使用的是JWT的验证方式,也就是我们获取用户的user_id和相关信息是从客户端传过来的JWT的token中获取的,所以我们就需要修改Yii2.0User组件中的代码来实现我们的需求。 分析 那么Yii使用us...

zpf_nevergiveup的博客 1410

Temporal Fusion Transformer(TFT)与扩散模型融合:时间序列预测新范式

本文探讨了Temporal Fusion Transformer(TFT)与扩散模型融合的时间序列预测新范式。该融合方案利用TFT强大的特征提取与可解释性,为扩散模型提供精准的“导航图”,从而在噪声数据中实现鲁棒预测,并原生支持不确定性量化,输出完整的概率分布与置信区间,为金融、能源等领域的风险决策提供更可靠的依据。

weixin_29096377的博客 291

RYU+Mininet的SDN架构-设计校园网络(一)

现有一个中学,需要设计一个中小型网络满足学校的网络需求。学校有教学区,实验室区域和服务器区域。教学区为了满足接入的灵活性和信号强度要求,需要满足设计WIFI满足日常教室和同学需求,接入上限为200人。实验室区域需要有一台教师主机方便管理实验室其余电脑,并且教师主机可以访问学校服务器,方便为同学们实验室授课。学校服务器区域设有学校相关重要文件和学校网页相关内容。最后学校还会接入互联网。

weixin_53284122的博客 8034

Yii2.0 探究三 :用户登录机制

前言:做后台管理的首要任务当然是登陆、注册;登陆的重要性不言而喻,而yii框架为我们封装好了用户的验证方法,我们要做的就是模仿,接触别的框架的可能会有人问:我自己写一个验证登录啊,不就是查询数据库,对照字段吗?下面就做出解答: 一、为什么推荐你用自带的登陆? yii2.0框架为我们封装好了用户的信息(登录后才可以查看); 比如: \Yii::$app->user->isGust

天下熙熙,皆为利来;天下攘攘,皆为利往。 1563

使用mindie:2.0.RC2-800I-A2-py311-openeuler24.03-lts制作一个通用的模型推理性能测试的镜像

本文详细介绍了在NPU环境下进行模型推理性能测试的完整流程。首先配置了测试所需的环境和设备信息,包括Python 3.10.9和3.11.6版本、测试脚本和镜像文件。然后分步骤说明了镜像制作过程:创建特权容器、安装Python 3.10.9、配置VLLM环境,并详细描述了测试容器的启动方法。最后提供了镜像打包和使用指南,包括如何加载镜像、启动容器、运行测试脚本(以DeepSeek-32B模型为例)以及更换测试模型的步骤。整个过程涉及环境变量配置、权限设置和服务启动等关键操作。

m0_50105717的博客 1015

yii2用户登陆

CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(32) NOT NULL, `authKey` varchar(100) NOT NULL DEFAULT '', `accessToken` varchar(100) NOT NULL DEFAULT '', PRIMARY KEY (`id`

qq_37805832的博客 1231

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

yii2 后台权限验证获取用户身份_Yii2全局过滤器/行为强制用户首先进行身份验证...

In my Yii2 application I'm trying to force all users to be authenticated. If they're not already authenticated they should be redirected to the login page.In Yii1 I did this by creating a class that w...

weixin_39792747的博客 398

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

yii2 后台权限验证获取用户身份,Yii2全局过滤器/行为强制用户首先进行身份验证...

In my Yii2 application I'm trying to force all users to be authenticated. If they're not already authenticated they should be redirected to the login page.In Yii1 I did this by creating a class that w...

weixin_33784667的博客 285

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

yii2修改默认demo中登录模块连接数据库

<?php namespace app\models; class User extends \yii\base\Object implements \yii\web\IdentityInterface { public $id; public $username; public $password; public $authKey; ...

时间是把杀刀猪 246

php restful yii,php-Yii RESTful身份验证

我在寻找我的应用程序中用于验证API用户身份的方法时遇到了麻烦.我最初打算构建一个用户可以通过Web访问和进行身份验证的系统,但是需求已发生变化,我需要实施一些其他操作,这些操作可以使用POST API调用以RESTful方式使用.我创建了一个扩展CBehaviour的类,并为所有未经身份验证的用户(found on the yii framework forum here)强制重定向到登录页面....

weixin_31684041的博客 134

PHP YII Web 应用开发(二)

Yii 认证框架的核心是一个名为user的应用组件,通常情况下,它是一个实现了IWebUser接口的对象。我们默认实现所使用的具体类是框架类CWebUser。这个用户组件封装了应用程序当前用户的所有身份信息。这个组件在我们使用yiic工具创建应用程序时,作为自动生成的应用程序代码的一部分为我们配置好了。配置可以在文件的components),由于它被配置为一个应用程序组件,名称为'user',我们可以在整个应用程序中的任何地方使用来访问它。我们还注意到类属性也在这里设置了。这个属性默认值为false。

龙哥盟 954

YII框架获取对象数组为普通数组方法

获取方式 $admin = $identity->getAdmin(); $data = $admin->getAttributes(); $identity 对象数组结构: AdminUserIdentity Object ( [admin:AdminUserIdentity:private] => Admin Object ( [_

aiku_de_yu的博客 1345

详解yii用户登录体系

详解yii用户登录体系 下面将我对yii用户登录的分析拿出来与大家共享一下,我是从Yii::app()->user,登录验证,持久化三个方面来研究 一.Yii::app()->user 这是Yii底层调用用户组件,是cwebuser的一个实例,如果没有在main.php文件里配置的话yii默认会调用cwebuser,当然也可以自己去扩展cwebuser这个类 先说一下所有组件...

做个好的手艺人 238

yii2 mysql 去重_Yii2 登录Model

namespace app\models;use Yii;class User extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface{public $auth_key='sun';public $access_token='sun';/*** @inheritdoc*/public static function ta...

weixin_36111033的博客 149

yii user 组件

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33736048的博客 831

Yii 用户登录验证

 原文地址:用户登录验证" href="http://blog.sina.com.cn/s/blog_685213e70101mo4i.html" target="_blank">Yii 用户登录验证作者:SvenC 1)首先在model文件夹中新建文件 LoginForm.php 代码如下   class LoginForm extends CFormModel {

wangliqiang1014的专栏 773

yii2自带的用户登录是如何实现的,底层具体一共包含了哪些部分?

以下是一个完整的代码示例,展示 Yii2 自带的用户登录是如何实现的。Yii2 的用户登录功能是由多个部分协作完成的。进游乐场前,保安会检查你的门票(用户名和密码)。想象一下,你去游乐场玩。

长风破浪会有时的博客 833
上一篇: php反射机制
下一篇: PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用——PHP SDK中Demo程序简析
sofia1217
博客等级 码龄17年 36粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值