我正在使用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版本,需要一个复选标记“我不是一个机器人”
1条答案
按热度按时间uemypmqf1#
这个问题可能与Turbo有关,它试图通过替换网页的几个部分来替换整个页面的重新加载。虽然这通常工作正常,但在这种情况下显然不行。
我假设验证码挑战被使用了两次,所以谷歌在第二次(或第三次)尝试时拒绝了验证码。
尝试禁用涡轮增压为您的登录形式,通过替换
字符串
与
型
如需详细了解Turbo,请访问this