【问题标题】:Problems With Simple captcha简单验证码的问题
【发布时间】:2023-03-11 04:16:01
【问题描述】:
我有一个奇怪的问题。我在 Rails 应用程序的表单中使用简单的验证码。如果我在网页中使用一个验证码,我没有任何问题。但是我有一个在一个页面中使用三(3)个表单的场景,其中所有三个表单都有验证码。这样当我刷新页面时,三种形式的验证码数据是相等的。
当我们来到数据库时,一旦页面被加载,一个特定 id 的验证码值就会被创建,如果我们刷新页面而不使用验证码,则记录正在更新而不是创建另一条记录,如果我在两个选项卡中打开网页,如果我在第一页提交表单。它抛出一个异常,上面写着“无效的验证码”
谁能告诉我如何在单页中处理多个验证码。我正在使用 simple_captcha 插件。
提前致谢
【问题讨论】:
标签:
ruby-on-rails
ruby
ruby-on-rails-plugins
【解决方案1】:
我看不出对一页使用多个验证码的任何意义。 (我假设您的两个表单将同时提交。)因为验证码的全部目的是避免自动提交表单。
第二点是,我不确定您为什么要在一个页面中使用三个表单。您可以考虑使用一个表单并在控制器端相应地过滤识别参数。
【解决方案2】:
你能解释一下为什么需要新记录而不是更新(刷新页面时)。
顺便说一句,simple_captcha 处理的一页上的多重表单也有同样的问题。我的问题是重复使用 simple_captcha 的方法show_simple_captcha。在这种情况下,它会导致重复的数据库插入。我对插件做了一些小改动来解决这个问题:
# Line 73 in lib/simple_captcha/view_helpers.rb (in show_simple_captcha method)
options[:field_value] = set_simple_captcha_data(simple_captcha_key, options[:code_type])
改为:
options[:field_value] = options[:multi] ? simple_captcha_key : set_simple_captcha_data(simple_captcha_key, options[:code_type])
现在我使用show_simple_captcha(:multi => true) 来生成验证码而不会命中数据库:
<!-- For first captcha on page -->
<%= show_simple_captcha(:object => :foo) %>
<!-- For next captchas on same page -->
<%= show_simple_captcha(:object => :bar, :multi => true) %>