1

登録フォームにreCaptchaを実装しました。しかし、正しいキャプチャコードを挿入するとエラーが発生しました:

CCaptchaValidator.action"captcha"が無効です。現在のコントローラーでそのようなアクションを見つけることができません。

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


}

上記のコードは、キャプチャをチェックする私のコントローラーです。問題がなければ、データベースにデータを保存して、新しく作成したユーザーでログインする必要があります。コードが間違っていると、今のところ、空白の白いページしか表示されません。ここで助けが必要かもしれません。

高速編集:Ups正しいコードの問題を修正し、モデルルールにジャンクを残しましたが、今は問題ありません。コードが間違っているときに問題を処理するためにまだいくつかの助けが必要だとしても、今は空白のページが表示されます。

4

1 に答える 1

1

エラーのある別のページをレンダリングするか、ユーザーログインアクションを実行せずに別のページにリダイレクトするだけです。

現時点では、$ respが正しくない場合は、単にfalseを返しています。この場合、何もレンダリングしていません。したがって、エラーページをレンダリングする

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

または、別のページにリダイレクトし、ログインまたはイベントのアクションを実行せずに、キャプチャのフォームフィールドでエラーが発生して同じものを再度レンダリングします。

推奨事項として、ifステートメントのネストを確認してください。これは単純なアクションであり、少し複雑になりすぎています。

于 2012-06-01T10:58:48.230 に答える