Skip to content

This is a Captcha gem for Rails Application. It run ImageMagick command to draw Captcha image.

License

Notifications You must be signed in to change notification settings

michael-ji0406/rucaptcha

 
 

Repository files navigation

This repo is forked from huacnlee/rucaptcha. The change is that we support use this for app client. Now you can get the capcha image with key parameter and post validate value with the same key value of key parameter.

ex.

Get xxx.com/captcha?key=kndfen23k3253
POST xxx.com/login {key: 'michael-ji0406/rucaptcha', email: 'foo@bar.com', password:[FILTERED], _rubcapcha: '4332'}

RuCaptcha

Gem Version Build Status Code Climate

This is a Captcha gem for Rails Applications. It runs an ImageMagick command to draw Captcha image - so it has NO performance issues or memory leak issues. There is NO: RMagick

Example

1 2 3 4 5 6 7

Idea by: https://ruby-china.org/topics/20558#reply4

中文介绍和使用说明

Feature

  • Only need ImageMagick, No RMagick, No mini_magick;
  • For Rails Application;
  • Simple, Easy to use;
  • File Caching for performance.

Requirements

  • ImageMagick 6.9+

Ubuntu

sudo apt-get install imagemagick ghostscript

Mac OS X

brew install imagemagick ghostscript

Usage

Put rucaptcha in your Gemfile:

gem 'rucaptcha'

Create config/initializers/rucaptcha.rb

RuCaptcha.configure do
  # Number of chars, default: 4
  self.len = 4
  # Image font size, default: 45
  self.font_size = 45
  # Cache generated images in file store, this is config files limit, default: 100
  # set 0 to disable file cache.
  self.cache_limit = 100
  # Custom captcha code expire time if you need, default: 2 minutes
  # self.expires_in = 120
  # Color style, default: :colorful, allows: [:colorful, :black_white]
  # self.style = :colorful
  # [Requirement]
  # Store Captcha code where, this config more like Rails config.cache_store
  # default: Rails application config.cache_store
  # But RuCaptcha requirements cache_store not in [:null_store, :memory_store, :file_store]
  self.cache_store = :mem_cache_store
end

Edit config/routes.rb, add the following code:

Rails.application.routes.draw do
  ...
  mount RuCaptcha::Engine => "/rucaptcha"
  ...
end

Controller app/controller/account_controller.rb

class AccountController < ApplicationController
  def create
    @user = User.new(params[:user])
    if verify_rucaptcha?(resource: @user) && @user.save
      redirect_to root_path, notice: 'Sign up successed.'
    else
      render 'account/new'
    end
  end
end

TIP: Sometime you may need keep last verified captcha code in session on verify_rucaptcha? method call, you can use keep_session: true. For example: Verify_rucaptcha? (resource: @user, opts: {keep_session: true}).

View app/views/account/new.html.erb

<form>
  ...
  <div class="form-group">
    <%= rucaptcha_input_tag(class: 'form-control', placeholder: 'Input Captcha') %>
    <%= rucaptcha_image_tag(alt: 'Captcha') %>
  </div>
  ...
</form>

And if you are use Devise, you can read this to add validation: RuCaptcha with Devise.

Write your test skip captcha validation

for RSpec

describe 'sign up and login', type: :feature do
  before do
    allow_any_instance_of(ActionController::Base).to receive(:verify_rucaptcha?).and_return(true)
  end

  it { ... }
end

for MiniTest

class ActionDispatch::IntegrationTest
  def sign_in(user)
    ActionController::Base.any_instance.stubs(:verify_rucaptcha?).returns(true)
    post user_session_path \
         'user[email]'    => user.email,
         'user[password]' => user.password
  end
end

About

This is a Captcha gem for Rails Application. It run ImageMagick command to draw Captcha image.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%