Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
A Google-style captcha for enterprise Rails apps
Ruby
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
resources
spec
tasks
.gitignore
MIT-LICENSE
README.markdown
Rakefile
gemspec.rb
init.rb

README.markdown

captcha

A Google-style captcha for enterprise Rails apps

Goals

  • Batch generate captchas
  • Use ciphered filenames (no need to store filename/captcha pairs)
  • Easy configuration
    • Number of captchas
    • Period for captcha refresh
    • Colors, wave, implode
  • Handle lots of users

Compatibility

Tested with Ruby 1.8.6, 1.8.7, and 1.9.1.

Install

script/plugin install git://github.com/winton/captcha.git

Create lib/captcha_config.rb (optional)

Captcha::Config.new(
  # Used for filename cipher
  :password => 'something-unique',
  # Captcha colors
  :colors => {
    :background => '#FFFFFF',
    :font => '#080288'
  },
  # Number of captcha images to generate
  :count => RAILS_ENV == 'production' ? 500 : 10,
  # Where to write captchas
  :destination => "#{RAILS_ROOT}/public/images/captchas",
  # Generate new batch every day
  :generate_every => 24 * 60 * 60
)

See lib/captcha/config.rb for more options.

application_controller.rb

class ApplicationController < ActionController::Base
  acts_as_captcha
end

You may now use the reset_captcha method in any controller.

user.rb

class User < ActiveRecord::Base
  acts_as_captcha :base => "base error when captcha fails", :field => "field error when captcha fails"
end

With no parameters, a default error is added to the "captcha" field (:field => true).

Specify :base => true to use a default error for base.

In your view

<img src="/images/captchas/<%= session[:captcha] %>.jpg" />
<%= text_field_tag(:captcha) %>

In your controller

user = User.new
user.known_captcha = session[:captcha]
user.captcha = params[:captcha]
user.save
reset_captcha

crontab

0 0 * * * cd /path/to/rails/app && /usr/bin/rake RAILS_ENV=production captcha:generate

Your config file sets the captcha refresh period. The rake task just checks if its time to repopulate, and does so if necessary.

Something went wrong with that request. Please try again.