关于Ruby on Rails上验证码的建议

时间:2009-12-07 10:27:45

标签: ruby-on-rails captcha

我想在Rails项目中实现一个表单提交的验证码,但我不知道该怎么做。我倾向于简单的实现,以及使用时的可靠性,因为它太复杂,因为我的应用程序不需要太高的安全级别。

有人有任何建议吗?

7 个答案:

答案 0 :(得分:17)

将CAPTCHA添加到Rails应用程序的最简单方法是使用 Ambethia reCAPTCHA

<强> 1。安装:

config.gem "ambethia-recaptcha", :lib => "recaptcha/rails", 
      :source => "http://gems.github.com"

如果您愿意,也可以将其安装为插件。

<强> 2。获取reCAPTCHA帐户:

您必须创建一个reCAPTCHA密钥。您可以在reCAPTCHA site上执行此操作。

第3。用法:

使用recaptcha_tags输出必要的HTML代码,然后使用verify_recaptcha验证输入。

<强> 4。进一步阅读:

答案 1 :(得分:4)

安装

将以下内容添加到您的GEMFILE

gem "galetahub-simple_captcha", :require => "simple_captcha"

gem 'galetahub-simple_captcha', :require => 'simple_captcha',
    :git => 'git://github.com/galetahub/simple-captcha.git'

如果你正在使用Bundler(或者使用包管理器进行Rails配置),那么运行bundle install

设置

安装后,请按照以下简单步骤设置插件。设置将取决于您的应用程序使用的rails版本。

rails generate simple_captcha
rake db:migrate

用法

基于控制器

在“app / controllers / application.rb”文件中添加以下行

ApplicationController < ActionController::Base
  include SimpleCaptcha::ControllerHelpers
end

在表单标签中的视图文件中添加此代码

<%= show_simple_captcha %>

并在控制器的操作中将其验证为

if simple_captcha_valid?
  do this
else
  do that
end

基于模型

在表单标签中的视图文件中添加此代码

<%= show_simple_captcha(:object=>"user") %>

并在模型类中添加此代码

class User < ActiveRecord::Base
  apply_simple_captcha
end

FormBuilder助手

<%= form_for @user do |form| -%>
  ...
  <%= form.simple_captcha :label => "Enter numbers.." %>
  ...
<% end -%>

使用验证码验证

注意:@ user.valid?仍将按预期工作,它不会验证验证码。

@user.valid_with_captcha?

使用验证码

保存

注意:@ user.save仍然可以正常工作,它不会验证验证码。

@user.save_with_captcha

Formtastic integration

SimpleCaptcha检测您是否使用Formtastic并附加

“SimpleCaptcha::CustomFormBuilder”.

<%= form.input :captcha, :as => :simple_captcha %>

选项&amp;实例

查看选项

*label* - provides the custom text b/w the image and the text field, the default is “type the code from the image”

*object* - the name of the object of the model class, to implement the model based captcha.

*code_type* - return numeric only if set to ‘numeric’

全局选项

image_style - provides the specific image style for the captcha image.

插件有八种不同的样式可供选择......

  1. simply_blue
  2. simply_red
  3. simply_green
  4. charcoal_grey
  5. embosed_silver
  6. all_black
  7. distorted_black
  8. almost_invisible
  9. 默认样式是'simply_blue'。您还可以指定“随机”以选择随机图像样式。

    distortion - handles the complexity of the image. The :distortion can be set to ‘low’, ‘medium’ or ‘high’. Default is ‘low’.
    

    *创建“rails_root / config / initializers / simple_captcha.rb”*

    SimpleCaptcha.setup do |sc|
      # default: 100x28
      sc.image_size = '120x40'
    
      # default: 5
      sc.length = 6
    
      # default: simply_blue
      # possible values:
      # 'embosed_silver',
      # 'simply_red',
      # 'simply_green',
      # 'simply_blue',
      # 'distorted_black',
      # 'all_black',
      # 'charcoal_grey',
      # 'almost_invisible'
      # 'random'
      sc.image_style = 'simply_green'
    
      # default: low
      # possible values: 'low', 'medium', 'high', 'random'
      sc.distortion = 'medium'
    end
    

    您可以添加自己的风格:

    SimpleCaptcha.setup do |sc|
      sc.image_style = 'mycaptha'
      sc.add_image_style('mycaptha', [
          "-background '#F4F7F8'",
          "-fill '#86818B'",
          "-border 1",
          "-bordercolor '#E0E2E3'"])
    end
    

    您也可以提供安装image_magick的路径:

    SimpleCaptcha.setup do |sc|
      sc.image_magick_path = '/usr/bin' # you can check this from console by running: which convert
    end
    

    您可以提供应存储tmp文件的路径。当你没有访问/ tmp(默认目录)

    时,这很有用
    SimpleCaptcha.setup do |sc|
      sc.tmp_path = '/tmp' # or somewhere in project eg. Rails.root.join('tmp/simple_captcha').to_s, make shure directory exists
    end
    

    如何更改SimpleCaptcha DOM元素的CSS?

    您可以根据需要在此文件中更改SimpleCaptcha DOM元素的CSS。

    * /应用/视图/ simple_captcha / _simple_captcha.erb *

    查看示例

    基于控制器的示例

    <%= show_simple_captcha %>
    
    <%= show_simple_captcha(:label => "human authentication") %>
    

    基于模型的示例

    <%= show_simple_captcha(:object => 'user', :label => "human authentication") %>
    

    模型选项

    message - provides the custom message on failure of captcha authentication the default is “Secret Code did not match with the Image”
    
    add_to_base - if set to true, appends the error message to the base.
    

    模型示例

    class User < ActiveRecord::Base
      apply_simple_captcha
    end
    
    class User < ActiveRecord::Base
      apply_simple_captcha :message => "The secret Image and code were different", :add_to_base => true
    end
    

答案 2 :(得分:3)

好吧,ReCaptcha将完成这项工作,网上有很多教程。

但是,你必须写一个正确的&#34; def create&#34;您的控制器中的(创建方法)将传递表单中的任何内容并同时验证Recaptcha。然后它会很好地工作。

它有一个小问题。将ReCaptcha插入表单后,表单验证停止工作。但是,可以使用插入模型文件中的简单代码来修复它:

after_validation :on => :create 

(:create =是控制器中的&#34; def create&#34;方法)。它将强制表单首先验证表单,然后验证Recaptcha。

答案 3 :(得分:0)

我在我的一个PHP项目中使用了Recaptcha。 http://recaptcha.net/
根据该网站,它还有Ruby的插件(http://recaptcha.net/resources.html)。虽然第一个ruby链接不起作用,但下一个链接仍然有效。 http://svn.ambethia.com/pub/rails/plugins/recaptcha/ 检查一下。

答案 4 :(得分:0)

我已经将ambethia rec rainbow用于rails应用程序。它最容易比其他

答案 5 :(得分:0)

就功能而言,

reCAPTCHA for rails非常棒。但是,如果您需要XHTML验证,请运行!此插件不会(也可能永远不会)验证。我发现令人尴尬的是,我的整个网站上只有一个页面无法验证 - 它是带有reCAPTCHA的页面。如果有其他选择,我会接受它。

答案 6 :(得分:0)

如果您正在使用验证的CAPTCHA,并且(几乎)像reCAPTCHA一样易于使用,请尝试我的SlideCAPTCHA。 (几天前写的,需要在实际使用中进行一些测试。)我将其部署过程基于reCAPTCHA插件,但你可以用CSS设置它。

它确实需要Ruby / GD,所以如果你还没有GD,我不能保证GD易于安装和使用!