2014-02-04 2 views
0

Я работаю с очень старыми приложениями для рельсов (v1.2.6) и вам нужно реализовать капчу на сайте. Кто-нибудь знает, какой подход я могу предпринять для этого?captcha in rails 1.2.6

Я пробовал:

  • Поиск рельсы плагинов, которые поддерживают v1.2.6 (ничего не нашел)
  • Настройка simple-captcha плагин (но работает только на рельсам> 3)

Любая помощь будет принята с благодарностью. Спасибо :)

+0

Rails 1.2 не имеет удобный механизм плагин встроенный (и это ** действительно ** старый). Я предполагаю, что единственный способ использования - прочитать источник других плагинов и очистить материал, который вам нужен, и включить его в свое приложение. Вероятно, вам понадобятся рабочие знания как плагинов Rails 3 (или любого другого, на который нацелен ваш плагин источника), так и Rails 1.2. Наконец, мне очень жаль вас ... –

+0

Хммм. Итак, я думаю, мне не повезло :( –

ответ

0

Итак, я закончил реализацию reCaptcha Non-JavaScript API, как предложил Хавьер.

Добавлено следующее в моем зрения:

<p class="text-black-11px-17px" style="color: red;"><%=flash[:captcha_error]%></p> 
<script type="text/javascript" 
src="http://www.google.com/recaptcha/api/challenge?k=PUBLIC_KEY_HERE"></script> 
<noscript> 
    <iframe 
src="http://www.google.com/recaptcha/api/noscript?k=PUBLIC_KEY_HERE" 
     height="300" width="500" frameborder="0"></iframe><br> 
    <textarea name="recaptcha_challenge_field" rows="3" cols="40"> 
    </textarea> 
    <input type="hidden" name="recaptcha_response_field" 
     value="manual_challenge"> 
</noscript> 

Добавлено следующее в моем контроллер:

# verify reCaptcha 
uri = URI.parse("http://www.google.com/recaptcha/api/verify") 
response = Net::HTTP.post_form(uri, { 
    "privatekey" => "PRIVATE_KEY_HERE", 
    "remoteip" => request.env['REMOTE_ADDR'], 
    "challenge" => params[:recaptcha_challenge_field], 
    "response" => params[:recaptcha_response_field] 
}) 

flash[:captcha_error] = nil 
if ((@contact.valid?) && (response.body.include? "success")) 
    # VALIDATION SUCCESSFUL - SEND THE EMAIL 
elsif (response.body.include? "false") 
    flash[:captcha_error] = "The CAPTCHA you entered is invalid. Please try again." 
    render :action => 'contact'   
else 
    render :action => 'contact' 
end 
1

Нет необходимости использовать плагин, рекомендуется использовать, когда они доступны, но это не обязательная вещь. Возможно, установка «Сделай сам» требует дополнительных шагов, но определенно будет работать. Обратите внимание, например, на reCAPTCHA documentation, есть полный раздел, посвященный объяснению использования библиотеки без плагинов.

В основном есть два подхода:

  1. Стандартный вызов и Non-JavaScript API.
  2. рекапчи AJAX API

С любым из этих способов, зависит от ваших потребностей, мы надеемся, вы должны быть искаженным работает во многих сценариях без проблем. API хорошо объяснен и имеет несколько примеров.

Надеюсь, это поможет.

+0

Но что произойдет, если Javascript отключен и форма отправлена? –

+0

Это описано в первом подходе «API без JavaScript». Пример показывает, что если javascript отключен, iframe загружается, и все работает так, как ожидалось. –