http://blog.sina.com.cn/s/blog_685213e70101mo4i.html

1)首先在model文件夹中新建文件 LoginForm.php 代码如下
 <?php

class LoginForm extends CFormModel
{
 public $username;
 public $password;
 public $rememberMe;
 private $_identity;
 
 public function rules()
 {
  return array(
   // username and password are required
   array('username, password', 'required'),
   // rememberMe needs to be a boolean
   array('rememberMe', 'boolean'),
   // password needs to be authenticated
   array('password', 'authenticate'),
  );
 }
 
 public function attributeLabels()
 {
  return array(
   'rememberMe'=>'Remember me next time',
  );
 }
 
 public function authenticate($attribute,$params)
 {
  if(!$this->hasErrors())
  {
   $this->_identity=new UserIdentity($this->username,$this->password);
   if(!$this->_identity->authenticate())
    $this->addError('password','Incorrect username or password.');
  }
 }
 
 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;
 }
}
 
2)在controller中添加 public function Login 代码如下
 
public function actionLogin() {
        // set the login page layout
        $this->layout = '/layouts/login_page';
        $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()) {
                $user_model = Users::model()->findByAttributes(array('username' => $model->username));
                if ($model->login()) {
                    // Set ip and date attributes to update user record
                    $attributes = array(
                        'last_loginip' => ip2long(Yii::app()->request->userHostAddress),
                        'last_logindate' => date('Y-m-d H:i:s', time()),
                    );

$this->redirect('index');
                }
            }
        }
        // display the login form
        $this->render('login', array(
            'model' => $model,
        ));
    }
 
 
3)编辑protected/component/UserIdentity.php文件 代码如下
 
<?php

class UserIdentity extends CUserIdentity {
  
    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;
        $record = Users::model()->findByAttributes(array('username' => $this->username));
        if ($record === null)
            $this->errorCode = self::ERROR_USERNAME_INVALID;
        else if ($record->password !== $this->password)
            $this->errorCode = self::ERROR_PASSWORD_INVALID;
        else {

Yii 用户登录验证的更多相关文章

  1. yii 用户登录验证(cwebuser) yii 用户登录 (记)

    yii 的确是一个强大而臃肿的框架,简单的小项目,或者只做后台接口调用的项目,建议不要用. 今天记录一下yii使用中cwebuser(Yii::app()->user->login())登 ...

  2. android loginDemo +WebService用户登录验证

        android loginDemo +WebService用户登录验证 本文是基于android4.0下的loginActivity Demo和android下的Webservice实现的.l ...

  3. Python程序练习1-模拟用户登录验证

    1.功能简介 此程序模拟用户登录验证的过程,实现用户名输入.黑名单检测.用户有效性判别.密码输入及验证等.用户在3次以内输入正确密码登陆成功,连续输错3次密码登陆失败,且该用户名被记录在黑名单,黑名单 ...

  4. djangorestframework-jwt自带的认证视图进行用户登录验证源代码学习

    Django REST framework JWT djangorestframework-jwt自带的认证视图进行用户登录验证源代码学习 SECRET_KEY = '1)q(f8jrz^edwtr2 ...

  5. cookie实现用户登录验证

    cookie实现用户登录验证 1, INSTALLED_APPS中注册app03 2,在主程序中新建映射关系到app3的url中 from django.conf.urls import url,in ...

  6. python3 用户登录验证的小功能

    用户登录验证,记录一下,还需要修改黑名单不合理 #!/usr/bin/env python3 ''' 需求:编写登录接口 1.输入用户名和密码 2.验证用户密码成功后输出欢迎消息 3.3次没有验证通过 ...

  7. 如何使用Django实现用户登录验证

    最初开始搞用户登录验证的时候感觉没什么难的,不就是增删改查中的查询数据库么,但是还是遇到许多小问题,而且感觉在查询数据库的时候,要把前端的数据一条一条的进行比对,会导致我的代码很丑,而且方式很不智,所 ...

  8. 用javascript实现简单的用户登录验证

    用javascript实现简单的用户登录验证 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  9. django 从零开始 8 用户登录验证 待测

    看文档 djang 自带一个用户登录验证的方法,不过有些看着懵逼,去网上找了一圈,发现很多都是照抄文档说明的,几乎没说啥原理 特别是 from django.contrib.auth import a ...

随机推荐

  1. 快速切题 cf118A

    这教导人们一定要看题,要看题,元音包含了‘y’,完毕,要看题啊 #include <cstring> #include <cstdio> #include <cctype ...

  2. Struts2工作原理及流程

    Struts2是基于MVC设计模式的JavaWeb 框架技术. 基于Struts2开发Java Web项目的主要步骤如下: (1)在web.xml中配置FilterDispatcher. (2)设计和 ...

  3. 浅谈:当程序员的N多好处,逆袭高富师

    选择一份职业,除了要要分析有没有钱途外(为什么要选择 IT 行业,IT 业有多火爆你造吗?),还要平衡其他方面的利弊.有很多想进入这个行业的小伙伴问我,程序员到底有什么好处.看样子这是很多小伙伴关心的 ...

  4. CDMA LTE FAQ2

    1.UE等级 LTE CAT4,应该指的是LTE Category4,字面意思是LTE的ue-Category设置为4.ue-Category指的是UE的接入能力等级.也就是UE能够支持的传输速率的等 ...

  5. php 特殊字符

    今天碰到一个处理文件特殊字符的事情,再次注意到这个问题,在php中: * 以单引号为定界符的php字符串,支持两个转义\'和\\ * 以双引号为定界符的php字符串,支持下列转义:     \n 换行 ...

  6. Ubuntu:系统启动服务

    系统启动服务 针对Ubuntu 5级别服务的说明 安装sysv-rc-conf sudo apt-get install sysv-rc-conf acpi-support 高级电源管理支持 acpi ...

  7. Redis学习第五课:Redis Set类型及操作

    Set是集合,它是string类型的无序集合.set是通过hash table实现的,添加.删除和查找的复杂度都是O(1). 对集合我们可以取并集.交集.差集.通过这些操作我们可以实现SNS中的好友推 ...

  8. python3:jsonpath-rw处理Json对象

    前提:接口自动化测试中,存在依赖情况:test_02的某个请求参数的值,需要依赖test_01返回结果中某个字段的数据,所以就先需要拿到返回数据中特定字段的值.这里使用到python中jsonpath ...

  9. UNIMRCP 代码走读

    基于UNIMRCP1.5.0的代码走读 与 填坑记录 1. server启动配置加载 入口:unimrcp_server.c static apt_bool_t unimrcp_server_load ...

  10. 20155328 2016-2017-2 《Java程序设计》第5周学习总结

    教材学习内容总结 程序设计本身的错误,建议使用Exception或其子类实例来表现. Java中所有错误都会被打包成对象. 如果父类异常对象在子类异常对象前被捕捉,则catch子类异常对象的区块将永远 ...