毎日SEの技術ブログ

平日は社内SE、休みは自宅でサービス開発するSEの技術ブログ

rails4.1 CHAPTCHAを使う

CHAPTCHAとは

入力フォームで機械的な投稿を防ぐために、画像の読みにくい文字を入力して認証させるやつ。
↓こんなの

f:id:UFUN:20140920211106j:plain

simple_captchaが便利そう

というかsimple_captchaしか見当たらない。
正しく動作させるまでに結構手こずった。手順通りやってもダメじゃん。
captcha画像の404エラーとか、
Error while running convert: sh: convert: command not found
みたいなエラーでつまづいている人に役立つかも。

インストール方法

Macでの方法 1 brew install ImageMagick
2 brew install ghostscript
3 Gemfileに以下を追記してbundle install

gem 'simple_captcha2', git: 'https://github.com/pludoni/simple-captcha.git', require: true

ここでインストール終了。

設定方法

1 rails g simple_captch を実行
2 rake db:migrate を実行
3 ApplicationControllerに以下を追記

include SimpleCaptcha::ControllerHelpers

4 表示させたいViewに以下を追記

<%= show_simple_captcha %>

5 実際に表示されていることと確認して終了

実際に機能させる

1 実際にCAPTCHAを利用するコントローラで以下の処理を追記

if simple_captcha_valid?
  # 認証成功したときの処理
else
  # 認証失敗したときの処理
end

カスタマイズする

1 CAPTCHAの文字入力フォームにクラスを適用したい場合

<!-- こうではなく 
<%= show_simple_captcha %> -->
<!-- こう -->
<%= show_simple_captcha(input_html: { class: 'classname' }) %>

bootstrap等でデザインを統一しているとき等に役立つ
2 生成される画像の複雑さをあげる config/initializers/simple_captcha.rbを作り以下を追記

SimpleCaptcha.setup do |sc|                                                                                                               
    # 画像のサイズ default: 100x28
    sc.image_size = '200x80'
 
    # 文字列の長さ default: 5
    sc.length = 6

    # 画像のスタイル 固定よりランダムが良い
    sc.image_style = 'random'

  # 画像のグニャグニャ感のレベル(上下の揺れ) default: low
    # possible values: 'low', 'medium', 'high', 'random'
    sc.distortion = 'high'

    # 画像のグニャグニャ感のレベル(立体感のある揺れ?)default: medium
    # possible values: 'none', 'low', 'medium', 'high'
    sc.implode = 'medium'
end