zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    Java8之Consumer接口
    Java8之Cloneable接口
    Java基础之Iterator接口
    Java基础之Iterable接口
    WPF中窗体在同一个位置实现不同页面切换
    WPF中单选框RadioButton
    WPF中的TextBlock处理长字符串
    WPF中Canvas使用
    WPF中窗体调用窗体
    WPF中HyperLink超链接的使用
  • 原文地址:https://www.cnblogs.com/jthb/p/3217279.html
Copyright © 2011-2022 走看看