【问题标题】:Setting Up Devise with Recaptcha - Rails 3使用 Recaptcha 设置设计 - Rails 3
【发布时间】:2011-05-22 23:58:45
【问题描述】:

我已尝试根据先前在此处提出的有关堆栈溢出的问题进行设置,但无法使其正常工作。验证码显示在我的表单上,但用户仍然可以在不填写验证码的情况下注册。

我正在使用以下说明。 https://github.com/plataformatec/devise/wiki/How-To:-Use-Recaptcha-with-Devise

  1. 我有我的私人和公共 recaptcha 密钥

环境.rb

ENV['RECAPTCHA_PUBLIC_KEY']  = 'mykey1234567'
ENV['RECAPTCHA_PRIVATE_KEY'] = 'mykey1234567'
  1. 我已经安装了 recaptcha gem。

宝石文件

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. 创建注册控制器

    rails 生成控制器注册创建

注册控制器

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" }

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 devise recaptcha


    【解决方案1】:

    您还需要告诉 Devise 使用您自定义的 RegistrationsController。您可以通过在 devise_for 声明中指定 :controllers 选项来执行此操作。如果没有这个,Devise::RegistrationsController 就会被调用,这可能解释了 recaptcha 不起作用的原因。

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

    【讨论】:

    • 我已将路由文件更改为以下内容。 devise_for :troopers, :controllers =&gt; { :registrations =&gt; "registrations" }, :path =&gt; "troopers", :path_names =&gt; { :sign_in =&gt; "login", :sign_out =&gt; "logout", :sign_up =&gt; "register" } 这似乎有效,但我现在没有收到任何错误消息。这是视图的问题吗?
    • 在控制器中调用 verify_recaptcha 时需要传递模型对象,例如verify_recaptcha(:model =&gt; resource)。您还可以指定其他选项,例如自定义错误消息。查看recaptcha/rails documentation
    • 我会查看文档链接。我已将自定义注册控制器中的 create 方法从 flash[:alert] 更改为 flash[:notice],这似乎可以正常工作。感谢您的帮助。
    猜你喜欢
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2012-07-23
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多