设为首页 加入收藏

TOP

Yii 用户登陆机制(二)
2015-02-02 14:16:09 来源: 作者: 【 】 浏览:26
Tags: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 是不是方便极了~


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Calabash+Gearman实现多手机同步.. 下一篇Yii中引入js和css文件

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: