yii 验证码的使用

在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,
            ),
            );
    }

public 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)); ?>
<pre name="code" class="php"><p><img src="http://my.csdn.net/uploads/201205/18/1337330851_3646.jpg" alt="">
</p><p>---------------------------the end------------------------------------</p></pre>
<pre></pre>
<pre></pre>
原文地址:https://www.cnblogs.com/jthb/p/3217279.html