SimpleCaptcha
SimpleCaptcha for Rails 3
Requirements
-
Ruby >= 1.8.7
-
Rails >= 3
-
ImageMagick should be installed on your machine to use this plugin. visit www.imagemagick.org/script/index.php for more details.
Installation
rails < 3.1
gem 'wxianfeng_simple_captcha', '0.1.0' , require: 'simple_captcha'
rails >= 3.1
gem 'wxianfeng_simple_captcha' , '0.2.0' , require: 'simple_captcha'
Setup
After installation, follow these simple steps to setup the plugin. The setup will depend on the version of rails your application is using.
rails generate simple_captcha
rake db:migrate
Usage
Controller Based
Add the following line in the file “app/controllers/application.rb”
ApplicationController < ActionController::Base
include SimpleCaptcha::ControllerHelpers
end
In the view file within the form tags add this code
<%= show_simple_captcha %>
and in the controller’s action authenticate it as
if simple_captcha_valid?
do this
else
do that
end
Model Based
In the view file within the form tags write this code
<%= show_simple_captcha(:object=>"user") %>
and in the model class add this code
class User < ActiveRecord::Basse
apply_simple_captcha
attr_accessible :captcha,:captcha_key
end
FormBuilder helper
<%= form_for @user do |form| -%>
...
<%= form.simple_captcha :label => "Enter numbers.." %>
...
<% end -%>
Validating with captcha
NOTE: @user.valid? will still work as it should, it will not validate the captcha code.
@user.valid_with_captcha?
Saving with captcha
NOTE: @user.save will still work as it should, it will not validate the captcha code.
@user.save_with_captcha
Formtastic integration
SimpleCaptcha detects if your use Formtastic and appends “SimpleCaptcha::CustomFormBuilder”.
<%= form.input :captcha, :as => :simple_captcha %>
Options & Examples
View Options
-
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’
Global options
-
image_style - provides the specific image style for the captcha image.
There are eight different styles available with the plugin as…
1) simply_blue
2) simply_red
3) simply_green
4) charcoal_grey
5) embosed_silver
6) all_black
7) distorted_black
8) almost_invisible
Default style is ‘simply_blue’. You can also specify ‘random’ to select the random image style.
-
distortion - handles the complexity of the image. The :distortion can be set to ‘low’, ‘medium’ or ‘high’. Default is ‘low’.
Create “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
You can add your own style:
SimpleCaptcha.setup do |sc|
sc.image_style = 'mycaptha'
sc.add_image_style('mycaptha', [
"-background '#F4F7F8'",
"-fill '#86818B'",
"-border 1",
"-bordercolor '#E0E2E3'"])
end
You can provide the path where image_magick is installed as well:
SimpleCaptcha.setup do |sc|
sc.image_magick_path = '/usr/bin' # you can check this from console by running: which convert
end
How to change the CSS for SimpleCaptcha DOM elements?
You can change the CSS of the SimpleCaptcha DOM elements as per your need in this file.
/app/views/simple_captcha/_simple_captcha.erb
View’s Examples
Controller Based Example
<%= show_simple_captcha %>
<%= show_simple_captcha(:label => "human authentication") %>
<%= image_tag show_image_src %>
<%= image_tag show_image_src(:object=>"signup") %>
Model Based Example
<%= show_simple_captcha(:object => 'user', :label => "human authentication") %>
Model Options
-
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.
Model’s Example
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
I18n
simple_captcha:
message:
default: "Secret Code did not match with the Image"
user: "The secret Image and code were different"
Who’s who?
Enjoy the simplest captcha implementation.