当前位置:首页 > CMS教程 > 其它CMS > 列表

Yii使用Captcha验证码的方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-02 11:23:23 浏览: 评论:0 

这篇文章主要介绍了Yii使用Captcha验证码的方法,结合实例形式分析了Yii使用Captcha验证码的MVC三层具体实现技巧,需要的朋友可以参考下。

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

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

1. Model:

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

  1. class UserLogin extends CFormModel 
  2.  public $username
  3.  public $password
  4.  public $rememberMe
  5.  public $verifyCode
  6.  public function rules() 
  7.  { 
  8.   return array
  9.    // username and password are required 
  10.    array('username, password,verifyCode''required'), 
  11.    // rememberMe needs to be a boolean 
  12.    array('rememberMe''boolean'), 
  13.    // password needs to be authenticated 
  14.    array('password''authenticate'), 
  15.    // verifyCode needs to be entered correctly 
  16.    array('verifyCode''captcha''allowEmpty'=>!CCaptcha::checkRequirements()), 
  17.   ); 
  18.  } 
  19.  /** 
  20.   * Declares attribute labels. 
  21.   */ 
  22.  public function attributeLabels() 
  23.  { 
  24.   return array
  25.    'rememberMe'=>Yii::t('user',"Remember me next time"), 
  26.    'username'=>Yii::t('user',"username or email"), 
  27.    'password'=>Yii::t('user',"password"), 
  28.    'verifyCode'=>Yii::t('user','Verification Code'), 
  29.   ); 
  30.  } 

2. Controller

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

  1. public function actions() 
  2.  return array
  3.   // captcha action renders the CAPTCHA image displayed on the contact page 
  4.   'captcha'=>array
  5.    'class'=>'CCaptchaAction'
  6.    'backColor'=>0xf4f4f4, 
  7.    'padding'=>0, 
  8.    'height'=>30, 
  9.    'maxLength'=>4, 
  10.   ), 
  11.   ); 
  12. ublic function actionLogin() 
  13.  if (Yii::app()->user->isGuest) { 
  14.   $model=new UserLogin; 
  15.   // collect user input data 
  16.   if(isset($_POST['UserLogin'])) 
  17.   { 
  18.    $model->attributes=$_POST['UserLogin']; 
  19. //在此核对验证码 
  20.    if($this->createAction('captcha')->validate($model->verifyCode, false)) 
  21.    { 
  22.     // validate user input and redirect to previous page if valid 
  23.     if($model->validate()) { 
  24.     //admin login only 
  25.     if( Yii::app()->getModule('user')->isAdmin()==1 ) 
  26.     { 
  27.     $this->lastViset(); 
  28.     if (strpos(Yii::app()->user->returnUrl,'/index.php')!==false) 
  29.      $this->redirect(Yii::app()->controller->module->returnUrl); 
  30.     else 
  31.      $this->redirect(Yii::app()->user->returnUrl); 
  32.     }else 
  33.     {//if no admin when login out 
  34.      $this->redirect(Yii::app()->controller->module->logoutUrl); 
  35.     } 
  36.    } 
  37.    }else 
  38.    {//提示错误 
  39.     $model->addError('verifyCode','验证码不对'); 
  40.    } 
  41.   } 
  42.   // display the login form 
  43.   $this->render('/user/login',array('model'=>$model)); 
  44.  } else 
  45.   $this->redirect(Yii::app()->controller->module->returnUrl); 

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

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

{

3. view

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

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

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

Tags: Captcha Yii验证码

分享到: