1

我在我的注册表单中实施了 reCaptcha。但是当我插入正确的验证码时出现错误:

CCaptchaValidator.action“验证码”无效。在当前控制器中找不到这样的动作。

public function actionCreate()
{
    $model=new TblUsers;

    // Uncomment the following line if AJAX validation is needed
        $this->performAjaxValidation($model);

    if(isset($_POST['TblUsers']))
    {
                Yii::import('ext.recaptchalib',true);
                $privatekey = '6LfgNLoSAAAAAGBVyqeKK9qH_wG5HIGIDd2KotLB';
                $resp = recaptcha_check_answer($privatekey, $_SERVER['REMOTE_ADDR'],
                        Yii::app()->request->getParam('recaptcha_challenge_field'), 
                        Yii::app()->request->getParam('recaptcha_response_field' ) );

        $model->attributes=$_POST['TblUsers'];
                if($resp->is_valid)
                {
        if($model->save())
                    if($this->_identity===null)
    {
        $this->_identity=new UserIdentity($model->username,$model->password);
        $this->_identity->authenticate();
    }
    if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
    {
        $duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
        Yii::app()->user->login($this->_identity,$duration);
                $this->redirect(array('site/index'));

        return true;
    }
    else
        return false;
    }
        }
        else
        {
    $this->render('create',array(
        'model'=>$model,
    ));
        }


}

上面的代码是我检查验证码的控制器。如果没问题,那么他应该将数据保存在数据库中并使用新创建的用户登录。如果代码错误,那么现在我只会得到一个空白的白页。请在这里需要一些帮助。

快速编辑:我用正确的代码解决了问题,我在模型规则中留下了一些垃圾,但现在很好。即使我认为当代码错误时我仍然需要一些帮助来处理这件事,因为我现在得到一个空白页。

4

1 回答 1

1

只需呈现一个有错误的不同页面或重定向到不同的页面而不采取任何用户登录操作。

目前,如果 $resp 不正确,您只是返回 false 。在这种情况下,您不会渲染任何内容。所以要么渲染一个错误页面

$this->render(......)

或重定向到不同的页面并且不对登录或事件采取任何操作再次呈现相同的验证码表单字段上的错误。

作为建议,请查看 if 语句的嵌套,这是一个简单的操作,但您使它有点太复杂了。

于 2012-06-01T10:58:48.230 回答