php教程

超轻量级php框架startmvc

Yii使用Captcha验证码的方法

更新时间:2020-03-07 07:59:19 作者:startmvc
本文实例讲述了Yii使用Captcha验证码的方法。分享给大家供大家参考,具体如下:详细代码

本文实例讲述了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程序设计有所帮助。

Yii Captcha 验证码 Yii验证码