1

我正在尝试在我的应用程序注册表中插入验证码。我发现的大多数解决方案(ambethia/recaptchaachiu/rack-recaptcha)都使用控制器辅助方法来检查验证码是否有效。这很好,但我使用 OmniAuth-identity 进行简单的身份验证,它不提供控制器——用户的注册表单直接发布到 OmniAuth 处理程序。

      = form_tag "/auth/identity/register", id: 'loginform' do 
        = error_messages_for @identity, :header_message => "" 

        %table
          %tr{colspan: 2} 
            %td
              = label_tag :title
              = text_field_tag :title, @identity.try(:title), size: '32'
          %tr
            %td
              = label_tag :first_name, nil, class: 'required'
              = text_field_tag :first_name, @identity.try(:first_name), size: '32'
            %td
              = label_tag :last_name, nil, class: 'required'
              = text_field_tag :last_name, @identity.try(:last_name), size: '32'
          %tr
            %td
              = label_tag :email, nil, class: 'required'
              = email_field_tag :email, @identity.try(:email), size: '32'
            %td
              = label_tag :phone, nil, class: 'required'
              = text_field_tag :phone, @identity.try(:phone), size: '32'
          %tr
            %td
              = label_tag :password, nil, class: 'required'
              = password_field_tag :password, nil, size: '32'
            %td
              = label_tag :password_confirmation, nil, class: 'required'
              = password_field_tag :password_confirmation, nil, size: '32'
          %tr
            %td{colspan: 2} 
              = label_tag 'recaptcha', "Captcha", class: 'required'
              = recaptcha_tags
          %tr
            %td{halign: 'right', colspan: 2} 
              = submit_tag 'Register', class: 'button'

我已经尝试了一切,从回发到自定义控制器,然后尝试点击注册路径,但这没有用,我见过的任何 gem 都无法进行模型验证(无论如何都违反了 MVC) .

我不拘泥于任何 reCAPTCHA 解决方案,我只需要一些可以防止自动注册的东西。我只想把设计放回这里并完成它,但我的团队之前已经把它撕掉了,出于某种原因讨厌它。有没有办法在表单和omniauth-identity之间注入控制器以便我们可以验证,或者是否有另一个可以进行模型验证的gem?

4

1 回答 1

0

因此,我最终得到的解决方案涉及向omniauth-identity 添加一个自定义钩子,它允许您在验证模型的登录等之前指定要调用的方法。我的组织的克隆有一个拉取请求,它显示了如何执行此操作。这是不雅和可怕的,但它主要是有效的。

于 2012-05-17T20:48:28.017 回答