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>
  • 相关阅读:
    QT设置窗口屏幕居中
    屏蔽ubuntu桌面鼠标右键以及Ctrl Alt F*
    ubuntu12.04 U盘自动挂载配置
    最受欢迎的15个Python开源框架
    异步非阻塞IO的Python Web框架--Tornado
    RabbitMQ RPC问题
    petapoco模板修改
    事件&表达式
    .net core2 单元测试
    检查邮箱IP是否在国际反垃圾邮件组织的黑名单中
  • 原文地址:https://www.cnblogs.com/jthb/p/3217279.html
Copyright © 2011-2022 走看看