2.3验证用户
我们要建立的博客应用程序需要区别对待管理员和访客。因此我们需要实现用户认证功能。
你可能已经
发现了应用的基本结构提供了用户认证去检查用户名和密码是否都为demo。此节,我们将要修改依靠user表来验证功能登录的
编码。
用户身份验证的原理是实现IUserIdentity类
接口。基本应用结构的用户验证类就是这样实现的。验证类存放在/wwwroot/blog/protected/components/UserIdentity.php
提示:
习惯上,类文件的名称必须与类名一致,后缀是.php,可以参考类使用别名路径。例如,我们用别名application.components.UserIdentity指向UserIdentity类。Yii框架中许多API用别名调用。使用别名路径调用要比绝对路径更容易移植代码。因为开发过程中使用绝对路径经常会带来麻烦。
按照如下修改认证类
在认证方法中,使用user类查询提交的用户名的相关信息。user类是通过gii工具生成的。用户类扩展自CActiveRecord,修改ActiveRecord功能使用oop思想操作tabl_user表
为了检查用户是否输入一个可用的密码,调用user类中validatePassword方法,需要修改user模型文件。通常在数据库不存放密码明文,我们把明文密码的结果加密后存在数据库,每次用户输入的结果加密后与数据库相比较。
在认证类中,将要重写getId()方法 让他返回查找到user的信息,代替父类实现返回用户名。用户名和id属性将要存储在用户session中,通过Yii::app()->user可以查到相关信息。
提示:验证类中,引用了CuserIdentity类文件。因为CUserIdentity是Yii框架提供的核心类文件。Yii将自动引入所有核心类文件。
我们同样可以这么调用user类。因为用户类文件在models文件夹下。配置文件中已经导入了所有的模型类文件。所以程序已经自动加载了这些类。
用户验证类主要被用于loginform类自动验证用户输入的数据。
信息:读者对于身份验证和用户组件常常很困惑。模型是一种身份验证的行为,被用来获取当前用户的信息。一个应用程序只有一个用户组件,但是他可以有一个或者多个认证类,依靠组件来支持认证。在验证身份的时候,一个认证实例传递状态信息给用户组件以便支持全部用户访问。
测试修改后的useridentity类,浏览器访问blog/index.php,尝试用正确的用户名密码登录。如果使用blog demo的数据库,我们应该可以用demo,demo登录成功。博客系统不需要提供用户管理功能。结果,用户不能改变他的账户或者建立一个新的web接口。用户管理功能被看作是博客程序的扩展功能。
很多地方不流畅 希望有此教程读者沟通