Yii使用Captcha验证码的方法

前端技术 2023/09/08 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程序设计有所帮助。

本文地址:https://www.stayed.cn/item/22035

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。