Установите драгоценный камень recaptcha с помощью существующего драгоценного камня devise с rubymine 3.1

#ruby-on-rails-3

#ruby-on-rails-3

Вопрос:

Что я уже пробовал делать: я пытался прочитать документацию на github и заставить ее работать на Rubymine, и мне удалось запутаться в том, что нужно для контроллеров, и что нужно в папке конфигурации. Я попробовал Google и нашел несколько довольно хороших руководств, но в них отсутствуют шаги, которые я не обязательно знаю, чтобы перейти тоже.

Что я пытаюсь выяснить: я хочу иметь возможность использовать recaptcha при регистрации для входа в систему, используя драгоценный камень devise, я уже сгенерировал страницы для моего входа в систему devise.

Что у меня есть на данный момент:

Я установил и подключил: devise 1.2.rc и recaptcha 0.3.1. Я запускаю Rubymine в Windows xp. Ruby SDK 1.8.7-p302, с Rails 3.0.3

Я был в Google, и у меня есть мои открытый и закрытый ключи. Следующий шаг говорит мне, что я должен добавить свои ключи в project / config / initializers / recaptcha.rb Это то, что содержится в этом файле:

  Recaptcha.configure do |config|
  config.public_key = 'myKey'
  config.private_key = 'myKey'
 end
  

Теперь я должен исправить свой gemfile с помощью:

  gem 'recaptcha', :require => 'recaptcha/rails'
  

У меня также есть мой config / application.rb для чтения:

  require 'rails/all'
 require 'net/http'
  

Я также добавил в свои внешние библиотеки / [gem] devise / app / views /devise /registrations /new.html.erb тег recaptcha:

    <%= recaptcha_tags %>
   <p><%= f.submit "Sign up" %></p>
  

Где я сталкиваюсь с проблемами (я думаю), это
app /controllers/registrations_controller.rb и config/routes.rb

Я немного в недоумении, что именно содержится в этих файлах. Я был бы признателен за любую помощь или за написанный кем-то учебник, который проведет меня через это шаг за шагом, был бы очень полезен. Спасибо

Вот что я сделал после сообщения Феликса:

внешние библиотеки / приложение / контроллеры / разработка /registrations_controller.rb

класс Devise::RegistrationsController < Devise::RegistrationsController для создания

       if verify_recaptcha then
          super
      else
          build_resource
          clean_up_passwords(resource)
          flash[:notice] = 'Invalid Captcha'
          render_with_scope :new
      end

  build_resource

  if resource.save
    if resource.active?
      set_flash_message :notice, :signed_up
      sign_in_and_redirect(resource_name, resource)
    else
      set_flash_message :notice, :inactive_signed_up, :reason => resource.inactive_message.to_s
      expire_session_data_after_sign_in!
      redirect_to after_inactive_sign_up_path_for(resource)
    end
  else
    clean_up_passwords(resource)
    render_with_scope :new
  end
end
  

Из Project / config /routes.rb:

  devise_for :users, :controllers => {:registrations => 'registrations'}  
  

Это ошибка, которую он выдает:

ActionController::RoutingError (неинициализированный постоянный RegistrationsController):

Визуализировано C:/Ruby/lib/ruby/gems/1.8/gems/actionpack-3.0.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb в пределах восстановления / компоновки (0.0 мс) ….. есть идеи?

Ответ №1:

Для ваших маршрутов вы можете сохранить свои обычные маршруты devise, за исключением указания вашего пользовательского контроллера:

 devise_for :users, :controllers => {:registrations => 'registrations'}
  

В registrations_controller.rb вы хотите создать подкласс Devise RegistrationsController и переопределить метод ‘create’:

 class RegistrationsController < Devise::RegistrationsController
    def create
        if verify_recaptcha then
            super
        else
            build_resource
            clean_up_passwords(resource)
            flash[:notice] = 'Invalid Captcha'
            render_with_scope :new
        end
    end
end
  

Комментарии:

1. итак, в моем registrations_controller.rb у меня есть мой текущий def create… Я должен полностью заменить или добавить к?

2. Что ж, ваш текущий контроллер регистраций должен относиться к подклассу Devise registrations controller и быть пустым в противном случае, если вы не выполнили другие настройки. Если у вас уже определен метод create, вы просто хотите остановить процесс регистрации, если verify_recaptcha возвращает false.