ruby-on-rails Ruby on Rails在表单错误后重置Recaptcha

oxalkeyp  于 4个月前  发布在  Ruby
关注(0)|答案(1)|浏览(77)

我正在使用reCAPTCHA gem(https://github.com/ambethia/recaptcha)。当用户提交一个有错误的表单时,我遇到了一个问题(就像他们忘记了一个字段)。当表单再次呈现错误时,似乎无论如何,recaptcha总是提交false,即使它显示了一个复选标记。如果我重新加载页面,那么它工作得很好。有没有办法解决这个问题?
更新:我在用户注册页面上使用了recaptcha,并且基本上遵循了gem github页面的代码。
表单视图:

<%= form_with(model: @user) do |f| %>
  <%= render :partial => 'shared/error_messages', :locals => { :object => @user} %>
    
    <%= f.label :firstname, "First Name" %>
    <%= f.text_field :firstname, class: 'form-control' %>
    
    <%= f.label :lastname, "Last Name" %>
    <%= f.text_field :lastname, class: 'form-control' %>
      
    <%= f.label :email, "E-mail Address" %>
    <%= f.email_field :email, class: 'form-control' %>
    
    <%= f.label :password, "Password" %>
    <%= f.password_field :password, class: 'form-control' %>
    
    <%= f.label :password_confirmation, "Confirm Password" %>
    <%= f.password_field :password_confirmation, class: 'form-control' %>
    
    <center><%= recaptcha_tags %></center>
    <br>

    <%= f.submit "Create New User", class: "btn btn-primary" %>
    
<% end %>

字符串
在控制器中:

def create
  @user = User.new(user_params)

  if verify_recaptcha(model: @user) && @user.save
    @user.send_activation_email
    flash[:info] = "Please check your email to activate your account"
    redirect_to root_url
  else
    render 'new', status: :unprocessable_entity
  end
end


当表单第一次提交时,我可以在参数中看到g-recaptcha-response存在。但是每次表单验证错误发生后,g-recaptcha-response都是空的,我会得到“reCAPTCHA验证失败,请重试”。这也忽略了其他表单验证错误,只有当我再次提交表单时才会显示recaptcha错误。
我已经尝试使用企业版和经典版,并已确保密钥是正确的。我使用的V2版本,需要一个复选标记“我不是一个机器人”

uemypmqf

uemypmqf1#

这个问题可能与Turbo有关,它试图通过替换网页的几个部分来替换整个页面的重新加载。虽然这通常工作正常,但在这种情况下显然不行。
我假设验证码挑战被使用了两次,所以谷歌在第二次(或第三次)尝试时拒绝了验证码。
尝试禁用涡轮增压为您的登录形式,通过替换

<%= form_with(model: @user) do |f| %>

字符串

<%= form_with(model: @user, local: true, data: {turbo: "false"} ) do |f| %>


如需详细了解Turbo,请访问this

相关问题