Invisible reCAPTCHA in rails applications.

577 views
Skip to first unread message

Kamesh Joshi

unread,
Apr 12, 2017, 3:12:21 AM4/12/17
to reCAPTCHA
Hi all,

Is there is any resource on the implementation of invisible reCAPTCHA in rails app.
Message has been deleted

rus...@drusound.com

unread,
Apr 12, 2017, 1:27:25 PM4/12/17
to reCAPTCHA
Yes I am no expert but I am getting a working solution on both the client side & server side.
whilst developing I am adding the js strait into the application layout

I use the  gem "recaptcha", require: "recaptcha/rails" for the server side stuff.

in gem file
 gem "recaptcha", require: "recaptcha/rails" 
run bundle install
==============================================================
for client side I just use the available online examples
==============================================================
ed I have a devise login form

in application.html.erb

  <script src="https://www.google.com/recaptcha/api.js" async defer></script>
     <script>
       function onFormSubmit(token) {
         document.getElementById("sign_in_user").submit();
       }
       function onBtnSubmit(token) {
         alert("ready to submit")
       }
     </script> 

     ====================================================
login form


  <div id="login_padding"></div> 
    <div class="row justify-content-center">
        <div class="card col-10 col-sm-8 col-md-6 col-lg-5 col-xl-4 card-outline-primary" id="user_login_form">
             <div class="card-block">
                <H2 class="card-header  ">
                    DruSound
                </H2>
               
                <%= simple_form_for(resource, :as => resource_name,
                                 :url => session_path(resource_name) ,
                                 :html => {:id => "sign_in_user"},
                                 ) do |f| %>
            
                       <div class="form-inputs card-block">
                         <%= f.input :email, placeholder: 'email'  %>
                         <%= f.input :password, placeholder: 'password' %>
                        <%# f.input :remember_me, as: :boolean if       devise_mapping.rememberable?          %>
                      
                      </div>
                    
                      <div class="form-actions">
                        <%= f.button :submit, "Log in" ,id:"sign_in",
                         :class=> "btn btn-outline-success pull-sm-right g-recaptcha",
                         data:{sitekey: "YOUR-SITE-KEY", callback:"onFormSubmit"}%> 
                      </div>
                <% end %>
                <%= render "users/shared/links" %>
            </div><!--  card block-->
        </div> <!--end login card -->
    </div>



     ====================================================
in my devise controller I have a before filter

class Users::SessionsController < Devise::SessionsController
# before_action :configure_sign_in_params, only: [:create]
   prepend_before_action :check_captcha, only: [:create] , :if => proc {params.has_key? :"g-recaptcha-response"}

  respond_to :html, :js  
  # GET /resource/sign_in
  #hello log
    def new
      super
      
       respond_to do |format|
          format.js
          format.html
           format.pdf do
             render :pdf => "file_name"
           end
          
        end
    end
    def create
     super
   
      respond_to do |format|
         format.js
         format.html
          format.pdf do
            render :pdf => "file_name"
          end
         
       end
   end
  # POST /resource/sign_in
  # def create
  #   super
  # end

  # DELETE /resource/sign_out
  # def destroy
  #   super
  # end

   private

    def check_captcha
     
      unless verify_recaptcha
        self.resource = resource_class.new sign_in_params
        respond_with_navigational(resource) { render :new }
      end 
    end
  # If you have extra params to permit, append them to the sanitizer.
  # def configure_sign_in_params
  #   devise_parameter_sanitizer.permit(:sign_in, keys: [:attribute])
  # end
end
Reply all
Reply to author
Forward
0 new messages