проверка recaptcha не генерируется с codeigniter - однако только при загрузке на веб-хостинг - PullRequest
2 голосов
/ 01 февраля 2010

Использование следующего онлайн-руководства (и исправление 1.7x внизу) http://codeigniter.com/forums/viewthread/94299/

Проверка Recaptcha работает хорошо при локальной работе (проверено как на моей машине с Windows, так и на машине с OSX друзей), однако при загрузке и на мой сервер, и на его веб-хост подпрограмма проверки для recaptch не проверяется, хотя другая проверка на страницы делают. Однако никаких ошибок не было, и я просмотрел код и не смог выяснить, что происходит не так. Если бы кто-нибудь мог помочь мне выяснить, что происходит, я был бы очень признателен.

вот классы, которые имеют дело с этим

приложения / библиотеки / 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;
        }
    }

Приложение / хелперы / recaptcha_helper.php

http://pastebin.com/m352494c3

application / controllers / forum.php - метод сообщения

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 Ответ

0 голосов
/ 02 февраля 2010

В моем коде я обычно пишу так:

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

$CI->input->ip_address() есть более сложный способ определения IP-адреса клиента. чем использовать только REMOTE_ADDR.

Также убедитесь, что у вас есть закрытый и открытый ключи, соответствующие доменному имени сервера, или используйте глобальный ключ.

...