Go to file
Jason Lee 46ddd15905 Use `ActiveSupport.on_load` to extend ActionController and ActionView.
http://api.rubyonrails.org/classes/ActiveSupport/LazyLoadHooks.html
92703a9ea5/actionpack/lib/action_controller/base.rb (L264)
7da8d76206/actionview/lib/action_view/base.rb (L215)
2017-02-15 12:03:24 +08:00
app/controllers/ru_captcha Use C extension to remove ImageMagick dependency (#40) 2017-01-22 10:16:57 +08:00
config Adding locale for pt-BR language 2015-10-31 10:30:07 -02:00
ext/rucaptcha Use C extension to remove ImageMagick dependency (#40) 2017-01-22 10:16:57 +08:00
lib Use `ActiveSupport.on_load` to extend ActionController and ActionView. 2017-02-15 12:03:24 +08:00
spec Use C extension to remove ImageMagick dependency (#40) 2017-01-22 10:16:57 +08:00
.gitignore Use C extension to remove ImageMagick dependency (#40) 2017-01-22 10:16:57 +08:00
.travis.yml Use C extension to remove ImageMagick dependency (#40) 2017-01-22 10:16:57 +08:00
CHANGELOG.md Fix `/rucaptcha` path issue when `config.action_controller.asset_host` has setup with CDN url. 2017-02-04 21:47:13 +08:00
Gemfile Add an `:keep_session` option for `verify_rucaptcha?` method to giva a way for let you keep session on verify, if true, RuCaptcha will not delete the captcha code session after validation. 2016-12-01 11:11:10 +08:00
Gemfile.lock Fix `/rucaptcha` path issue when `config.action_controller.asset_host` has setup with CDN url. 2017-02-04 21:47:13 +08:00
LICENSE Initial commit 2015-10-26 14:07:48 +08:00
README.md Update README.md 2017-01-22 13:43:07 +08:00
Rakefile Use C extension to remove ImageMagick dependency (#40) 2017-01-22 10:16:57 +08:00
rucaptcha.gemspec Update gem summary 2017-01-22 10:21:29 +08:00
test Use C extension to remove ImageMagick dependency (#40) 2017-01-22 10:16:57 +08:00

README.md

RuCaptcha

Gem Version Build Status Code Climate

This is a Captcha gem for Rails Applications. It drawing captcha image with C code.

Example

中文介绍和使用说明

Feature

  • No dependencies. No ImageMagick, No RMagick.
  • For Rails Application;
  • Simple, Easy to use;
  • High performance.

Usage

Put rucaptcha in your Gemfile:

gem 'rucaptcha'

Create config/initializers/rucaptcha.rb

RuCaptcha.configure do
  # Color style, default: :colorful, allows: [:colorful, :black_white]
  # self.style = :colorful
  # Custom captcha code expire time if you need, default: 2 minutes
  # self.expires_in = 120
  # [Requirement/重要]
  # Store Captcha code where, this config more like Rails config.cache_store
  # default: Read config info from `Rails.application.config.cache_store`
  # But RuCaptcha requirements cache_store not in [:null_store, :memory_store, :file_store]
  # 默认:会从 Rails 配置的 cache_store 里面读取相同的配置信息,用于存储验证码字符
  # 但如果是 [:null_store, :memory_store, :file_store] 之类的,你可以通过下面的配置项单独给 RuCaptcha 配置 cache_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?(@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? @user, 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