Настройка Devise с помощью Recaptcha - Rails 3 - PullRequest
2 голосов
/ 23 мая 2011

Я попытался настроить это на основе ранее заданных вопросов о переполнении стека, но не смог заставить его работать. На моих формах отображается капча, но пользователь все равно может зарегистрироваться без заполнения рекапчи.

Я работаю со следующими инструкциями. https://github.com/plataformatec/devise/wiki/How-To:-Use-Recaptcha-with-Devise

  1. У меня есть свои закрытые и открытые ключи рекапитчи

environment.rb

ENV['RECAPTCHA_PUBLIC_KEY']  = 'mykey1234567'
ENV['RECAPTCHA_PRIVATE_KEY'] = 'mykey1234567'
  1. Я установил гем recaptcha.

Gemfile

source 'http://rubygems.org'

gem 'rails', '3.0.3'

gem 'sqlite3-ruby', :require => 'sqlite3'
gem 'devise', '1.1.7'
gem "jquery-rails"
gem 'recaptcha', :require => 'recaptcha/rails'
  1. Я добавил теги recaptcha в свое представление регистрации.

new.html.erb

      <%= recaptcha_tags %>

  <p><%= f.submit "Sign up" %></p>
  1. Контроллер созданных регистраций

    Рельсы генерируют контроллер Регистрации создают

Контроллер регистрации

class RegistrationsController < Devise::RegistrationsController

def create
      if verify_recaptcha
        super
      else
        build_resource
        clean_up_passwords(resource)
        flash[:alert] = "There was an error with the recaptcha code below. Please re-enter the code and click submit."
        render_with_scope :new
      end
    end
end

Я должен отредактировать файл маршрутов, но не уверен, что именно может быть причиной проблемы.

Файл моих маршрутов

  devise_for :troopers, :path => "troopers", :path_names => { :sign_in => "login", :sign_out => "logout", :sign_up => "register" }

Спасибо за любую помощь.

1 Ответ

2 голосов
/ 23 мая 2011

Вам также необходимо указать Devise, чтобы использовать ваш настроенный контроллер регистрации.Это можно сделать, указав параметры :controllers в объявлении devise_for.Без этого вызывается Devise::RegistrationsController, что, вероятно, объясняет, почему не работает recaptcha.

  devise_for :troopers,
             :controllers => { :registrations => "registrations" },
             :path => "troopers",
             :path_names => { :sign_in => "login", :sign_out => "logout", :sign_up => "register" }
...