Yii使用Captcha验证码的方法

5年以前  |  阅读数:658 次  |  编程语言:PHP 

本文实例讲述了Yii使用Captcha验证码的方法。分享给大家供大家参考,具体如下:

详细代码可参考:yii自带的示例代码post项目,里面有一个contact表单用到了验证码.

1. Model:

将验证码加入UserLogin的一个属性:


    class UserLogin extends CFormModel
    {
     public $username;
     public $password;
     public $rememberMe;
     public $verifyCode;
     public function rules()
     {
      return array(
       // username and password are required
       array('username, password,verifyCode', 'required'),
       // rememberMe needs to be a boolean
       array('rememberMe', 'boolean'),
       // password needs to be authenticated
       array('password', 'authenticate'),
       // verifyCode needs to be entered correctly
       array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()),
      );
     }
     /**
      * Declares attribute labels.
      */
     public function attributeLabels()
     {
      return array(
       'rememberMe'=>Yii::t('user',"Remember me next time"),
       'username'=>Yii::t('user',"username or email"),
       'password'=>Yii::t('user',"password"),
       'verifyCode'=>Yii::t('user','Verification Code'),
      );
     }
    }

2. Controller

在LoginController控制器加入映射动作CCaptchaAction


    public function actions()
    {
     return array(
      // captcha action renders the CAPTCHA image displayed on the contact page
      'captcha'=>array(
       'class'=>'CCaptchaAction',
       'backColor'=>0xf4f4f4,
       'padding'=>0,
       'height'=>30,
       'maxLength'=>4,
      ),
      );
    }
    ublic function actionLogin()
    {
     if (Yii::app()->user->isGuest) {
      $model=new UserLogin;
      // collect user input data
      if(isset($_POST['UserLogin']))
      {
       $model->attributes=$_POST['UserLogin'];
    //在此核对验证码
       if($this->createAction('captcha')->validate($model->verifyCode, false))
       {
        // validate user input and redirect to previous page if valid
        if($model->validate()) {
        //admin login only
        if( Yii::app()->getModule('user')->isAdmin()==1 )
        {
        $this->lastViset();
        if (strpos(Yii::app()->user->returnUrl,'/index.php')!==false)
         $this->redirect(Yii::app()->controller->module->returnUrl);
        else
         $this->redirect(Yii::app()->user->returnUrl);
        }else
        {//if no admin when login out
         $this->redirect(Yii::app()->controller->module->logoutUrl);
        }
       }
       }else
       {//提示错误
        $model->addError('verifyCode','验证码不对');
       }
      }
      // display the login form
      $this->render('/user/login',array('model'=>$model));
     } else
      $this->redirect(Yii::app()->controller->module->returnUrl);
    }

在验证用户名密码前,检查验证码:


    if($this->createAction('captcha')->validate($model->verifyCode, false))
    {

3. view

在视图中显示验证码图片,输入框


    <?php $this->widget('CCaptcha'); ?>
      <?php echo CHtml::activeTextField($model,'verifyCode',array('tabindex'=>1)); ?>
    <img src="http://www.XXXX.net/uploads/123456.jpg" alt="">

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例