2017-01-24 8 views
2

私はCodeigniter WebアプリケーションにGoogleのreCAPTCHAを追加しようとしています。Codeigniter検証エラー:「あなたのフィールド名Captcha(recaptcha)に対応するエラーメッセージにアクセスできません」

しかし、私はこの問題に実行し続ける: Unable to access an error message corresponding to your field name Captcha. (recaptcha)

私はエラーをスローするようにフォームを送信しようと、$server_output['success']は、このように$this->form_validation->set_message('recaptcha', 'Please redo the {field}.');を実行FALSEする必要がありますが、CodeIgniterのは、すべてのコールバック関数を実行しているようには見えません。 ..

検証は(タイトルのエラーメッセージに加えて)エラー出力として他のすべてのために働いている:

The Username field is required. The Password field is required. The Password Confirmation field is required. The Email field is required.

私は(スリムコントローラを保つための条約やモデルの脂肪以下)私のモデルを通じて検証を実行している:ここで

public function __construct() 
{ 
    parent::__construct(); 
    $this->load->library('form_validation'); 
} 

public function register_validation() 
{ 
    /* 
    * INITIALIZE FORM VALIDATION RULES 
    */ 
    $this->form_validation->set_rules('username', 'Username', 
     array(
      // REMOVED FOR PRIVACY REASONS. 
     ) 
    ); 
    $this->form_validation->set_rules('password', 'Password', 
     array(
      // REMOVED FOR PRIVACY REASONS. 
      ) 
    ); 
    $this->form_validation->set_rules('password_confirmation', 'Password Confirmation', 
     array(
      // REMOVED FOR PRIVACY REASONS. 
      ) 
    ); 
    $this->form_validation->set_rules('email', 'Email', 
     array(
      // REMOVED FOR PRIVACY REASONS. 
     ) 
    ); 

    /* 
    * SET CUSTOM VERIFICATION RULES: 
    * 1. GOOGLE RECAPTCHA WIDGET 
    */ 
    $this->form_validation->set_rules('g-recaptcha-response', 'Captcha', 'callback_recaptcha'); 

    /* 
    * CHANGE ERROR MESSAGES FOR SOME RULES. 
    */ 
    $this->form_validation->set_message('is_unique', 'The {field} has already been taken!'); 

    /* 
    * RUN VALIDATION, 
    * IF VALIDATION IS NOT PASSED --> RETURN FALSE. 
    */ 
    if ($this->form_validation->run() === FALSE) 
     return FALSE; 
    /* 
    * ELSE WHEN EVERYTHING PASSES VALIDATION AND RECAPTCHA, 
    * TRY TO CREATE NEW USER. 
    */ 
    else 
    { 
     /* 
     * TRY TO CREATE NEW USER. 
     */ 
     if ($this->create_user()) 
     { 
      /* 
      * SET FLASHDATA TO ALERT USER THAT 
      * THE ACCOUNT HAS BEEN SUCCESSFULLY CREATED. 
      */ 
      $this->session->account_created = TRUE; 
      $this->session->mark_as_flash('account_created'); 
      return TRUE; 
     } 
     else 
     { 
      /* 
      * THROW ERROR AND ALERT USER VIA FLASHDATA. 
      */ 
      $this->session->account_created = FALSE; 
      $this->session->mark_as_flash('account_created'); 
      return FALSE; 
     } 
    } 
} 

は、同じクラス/モデルの私のreCAPTCHAのコールバック関数です:

/* 
* RECAPTCHA FUNCTION 
*/ 
public function recaptcha($data = '') 
{ 
    /* 
    * INITIALIZE VARIABLES. 
    */ 
    $google_api_url = 'https://www.google.com/recaptcha/api/siteverify'; 
    $google_secret_key = 'REMOVED FOR PRIVACY REASONS'; 
    $ip = $this->input->ip_address(); 
    $response = $data; 

    /* 
    * INITIALIZE CURL. 
    */ 
    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL, $google_api_url); 
    curl_setopt($curl, CURLOPT_POST, 1); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, 
     http_build_query(array(
       'secret' => $google_secret_key, 
       'response' => $response, 
       'remoteip' => $ip, 
      ) 
     ) 
    ); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

    /* 
    * RUN CURL. 
    */ 
    $server_output = curl_exec($curl); 
    curl_close($curl); 
    $server_output = json_decode($server_output, true); 

    /* 
    * CHECK RECAPTCHA SUCCESS 
    */ 
    if ($server_output['success']) 
     return TRUE; 
    else 
    { 
     $this->form_validation->set_message('recaptcha', 'Please redo the {field}.'); 
     return FALSE; 
    } 
} 

私は何が間違っていますか?モデル内で検証を実行しているため動作しませんか? 2時間から3時間の間、このままになってしまった...コードが読めるといいと思う。

感謝〜

答えて

1

“Unable to access an error message corresponding to your field name"

私はフィールドが値なし必要なルールを持っていないときに上記のエラーが表示されていると思います:

$this->form_validation->set_rules('g-recaptcha-response', 'Captcha', 'required|callback_recaptcha'); 

以下

のようなルールを設定してみてくださいOR (最新版CIの場合)

$this->form_validation->set_rules(
     'g-recaptcha-response', /* Field */ 
     'Captcha',    /* Label */ 
     array(    /* Rules */ 
       'required', 
       array($this->your_model, 'recaptcha') 
      ) 
); 

OR

$this->form_validation->set_rules(
     'g-recaptcha-response', /* Field */ 
     'Captcha',    /* Label */ 
     array(    /* Rules */ 
       'required', 
       array('my_recaptcha', array($this->your_model, 'recaptcha')) 
      ), 
     array(    /* Error lists */ 
       'my_recaptcha' => 'Invalid Recaptcha' 
      ) 
); 

よりhere

+0

それでも同じエラー...フムを参照してください。 – radiantMemory

+0

どのバージョン? –

+0

CodeIgniterのどのバージョン?最新のもの。バージョン3.1.3 – radiantMemory

関連する問題