我正在尝试将验证码插入到我的应用程序的注册表单中。我发现的大多数解决方案(ambethia/recaptcha和achiu/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'
我已经尝试了从回发到自定义控制器然后尝试命中注册路径的所有内容,但是这不起作用,我看到的任何宝石都无法进行模型验证(并且违反了MVC ,无论如何)。
我没有坚持任何reCAPTCHA解决方案,我只需要一些阻止自动注册的东西。我会把设计放回到这里,并完成它,但我的团队之前已经把它撕掉了,出于某种原因讨厌它。有没有办法在表单和omniauth-identity之间注入一个控制器,以便我们可以验证,还是有另一个可以进行模型验证的gem?
答案 0 :(得分:0)
因此,我最终的解决方案是在omniauth-identity中添加自定义挂钩,允许您在验证模型的登录等之前指定要调用的方法。我的组织克隆上有一个pull request,它显示了如何执行此操作。它不够优雅和可怕,但它主要起作用。