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

问题描述 投票:0回答:1

我在 Ruby on Rails 的表单上使用 reCAPTCHA gem (https://github.com/ambethia/recaptcha)。当用户提交有错误的表单(就像他们忘记了某个字段)时,我遇到了问题。当表单再次呈现错误时,似乎无论如何,验证码总是提交错误,即使它显示了复选标记。如果我重新加载页面,那么它就可以正常工作。有办法解决这个问题吗?

更新:我在用户注册页面上使用 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 验证失败,请重试”。这也会忽略其他表单验证错误,并且仅在我再次提交表单错误的表单时显示验证码错误。

我已经尝试过使用企业版和经典版,并确保密钥是正确的。我使用的是 V2 版本,需要勾选“我不是机器人”

ruby-on-rails recaptcha
1个回答
0
投票

此问题可能与 Turbo 有关,它尝试通过仅替换网页的几个部分来替换整页重新加载。虽然这通常工作得很好,但在这种情况下显然不行。

尝试通过替换来禁用登录表单的 Turbo

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

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

要详细了解 Turbo,请访问 this

© www.soinside.com 2019 - 2024. All rights reserved.