2012-05-17 70 views
1

我試圖插入驗證碼到我的應用程序的註冊表單。大多數解決方案(ambethia/recaptchaachiu/rack-recaptcha)我發現正在使用控制器輔助方法來檢查驗證碼是否有效。這很棒,所有的,但我使用OmniAuth身份爲我的簡單身份驗證,它不提供控制器 - 用戶的註冊表單直接發佈到OmniAuth處理程序。驗證碼解決方案使用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

因此,我最終的解決方案是將自定義掛鉤添加到omniauth-identity中,這允許您在驗證模型的登錄等之前指定要調用的方法。我組織的克隆上有一個pull request,它顯示瞭如何做到這一點。這是不雅和可怕的,但它大多是有效的。

相關問題