recaptcha doğrulama CodeIgniter ile atılan değil - ancak host için tarih yalnızca

1 Cevap php

Online aşağıdaki kılavuzu kullanarak (ve alt 1.7x düzeltme) http://codeigniter.com/forums/viewthread/94299/

Benim sunucu ve kendi web hem recaptch için doğrulama rutin ev sahipliği de yükledi ancak sayfalarındaki diğer doğrulama yapmak olsa bile teslim alamadım görüntülenir (benim windows makinesi ve bir arkadaş OSX makinede hem test) yerel olarak çalışırken Güvenlik Sorgulama doğrulama iyi çalışıyor . Ancak hiçbir hata atılır ve ben kod boyunca baktım ve neyin yanlış gittiğini öğrenmek mümkün var. Herkes bana bunun ne olup bittiğini öğrenmek yardımcı olabilir eğer büyük mutluluk duyacağız.

Burada bu başa sınıfları

application/libraries/MY_Form_Validation.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Form_Validation extends CI_Form_Validation
{

    function MY_Form_Validation()
    {
        parent::CI_Form_Validation();
    }

    function recaptcha_matches() {
        $CI = & get_instance();
        $CI->config->load('recaptcha');
        $public_key = $CI->config->item('recaptcha_public_key');
        $private_key = $CI->config->item('recaptcha_private_key');
        $response_field = $CI->input->post('recaptcha_response_field');
        $challenge_field = $CI->input->post('recaptcha_challenge_field');
        $response = recaptcha_check_answer($private_key, $_SERVER['REMOTE_ADDR'], $challenge_field, $response_field);

        if ($response->is_valid) {
            return TRUE;
        }
        else {
            $this->recaptcha_error = $response->error;
            $this->set_message('recaptcha_matches', 'The %s is incorrect. Please try again.');
            return FALSE;
        }
    }

application/helpers/recaptcha_helper.php

http://pastebin.com/m352494c3

application/controllers/forum.php - post thread method

public function add_thread($category_id = null)
{
    $category = $this->forums->get_category($category_id);
    if ($category == false)
    {
        $this->template->set('title', 'Invalid Page');
        $data['error_message'] = "Invalid category to add thread too";
        $this->template->load('template', 'error', $data);
        return;
    }

    $user = $this->users->get($this->session->userdata('user_id'));

    $data['category_id'] = $category['id'];
    $data['category_title'] = $category['category_title'];
    $data['loggedin'] = $this->session->userdata('loggedin');

    $this->form_validation->set_rules('thread_title', 'Title', 'required');
    $this->form_validation->set_rules('thread_body', 'Body', 'required');

    if (!$data['loggedin'])
    {
        $this->form_validation->set_rules('recaptcha_challenge_field', 'answer to the security question', 'recaptcha_matches');
    }

    if ($this->form_validation->run() == FALSE)
    {
        $this->template->load('template', 'forums/add_thread', $data);
        return;
    }

    $thread['thread_title'] = $this->input->post('thread_title');
    $thread['thread_body'] = $this->input->post('thread_body');
    if($user==false){
        $thread['user_id'] = -1;
    }else{
        $thread['user_id'] = $user->id;
    }
    $thread['posted_date'] = date("Y-m-d H:i:s");
    $thread['category_id'] = $category_id;

    $this->forums->add_thread($thread);
    redirect('forums/view/' . $category_id, 'refresh');
}

1 Cevap

Benim kod, ben genelde bu gibi yazmak:

$response = recaptcha_check_answer($private_key, $CI->input->ip_address(), $challenge_field, $response_field);

$CI->input->ip_address() istemci IP adresi tespit etmek için daha sofistike bir yol var. REMOTE_ADDR yalnız kullanmaktan daha.

Ayrıca, sunucunun etki alanı adını eşleşti hem özel hem de kamu anahtara sahip olduğunuzdan emin olun, ya da küresel tuşunu kullanın.