Project

captchah

0.01
A long-lived project that still receives updates
A Rails captcha gem that attempts to determine whether or not a user is human.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

Captchah

A Rails captcha gem that attempts to determine whether or not a user is human.

Installation

Add this line to your application's Gemfile:

gem 'captchah'

And execute:

$ bundle

Requirements

ImageMagick or GraphicsMagick command-line tool has to be installed. You can check if you have it installed by running:

$ convert -version

Dependencies

gem 'rails', '~> 5'
gem 'mini_magick', '~> 4.0'

Usage

Include the Captchah module into your controller. Example:

class YourController < ApplicationController
  include Captchah

Add the captchah_tag form helper to your form. Note, only 1 captchah_tag per form is allowed. Example:

<%= form_tag('/your-path') do %>
  <%= captchah_tag %>

Note, the gem uses the 'Verdana' font to create the puzzle image. If the font is missing from your system, please install it, or specify a different one as the 'puzzle_font' argument shown below. To see what fonts are available to ImageMagick, you can run:

$ convert -list font

Once a user submits your form, you can verify if they have typed in the correct characters by calling the verify_captchah method inside your controller. Example:

class YourController < ApplicationController
  include Captchah

  def create
    redirect_to('/your-path') unless verify_captchah == :valid
  end

Details

The captchah_tag form helper accepts the following arguments:

captchah_tag(
  id: 'unique-id',           # String value                     Default: (automatically generated)
  difficulty: 3,             # Integer value between 1 and 5    Default: 3
  expiry: 10.minutes,        # ActiveSupport::Duration object   Default: 10.minutes
  width: 140,                # Integer value                    Default: 140(pixels)
  action_label: 'Type...',   # String value                     Default: 'Type the letters you see:'
  reload_label: 'Reload',    # String value                     Default: 'Reload'
  reload_max: 5,             # Integer value                    Default: 5
  reload: true,              # Boolean value                    Default: true
  css: true,                 # Boolean value                    Default: true
  csp_nonce: 'csp-id',       # String value                     Default: nil
  required: true,            # Boolean value                    Default: false
  puzzle_font: 'Verdana'     # String value                     Default: 'Verdana'
)

The verify_captchah method returns the following statuses:

:valid                          # The user has typed in the correct characters.
:invalid                        # The user has not typed in the correct characters.
:expired                        # The captcha has expired.
:no_params                      # params[:captchah] is empty.

Running the tests

$ bundle exec rspec

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/evgeniradev/captchah.

License

Captchah is released under the MIT License. See LICENSE for details.