iKnow! APIを使ったRails用CAPTCHAプラグインを作ってみた
http://code.google.com/p/captcha-on-iknow/
とりあえずiKnowのフォーラムに一番乗りするという目標は果たした。眠いのであとで書く・・・。
ということで、iKnow! API使ってCAPTCHA作ってみた。ちゃんとAccessibilityにも考慮して音声キャプチャ付き。というよりもiKnow! API使えば音声キャプチャが簡単に作れそうなのでこれを作ることにしたというのが正確な表現。
キャプチャ部分の見た目は以下のような感じ。上がテキスト版で下が音声版。デフォルトカラーはiKnow Blue(いま名付けた)。赤いボタンでモードを切り替えたりキャプチャを再生成したり。まぁ普通っすね。
音声版は青いボタンを押せば再生される。
音声キャプチャの方は意外とちゃんと使えそうな気がした。もちろんこれから細かいところを作り込んだり、不具合を修正したりすれば、だけど。
CAPTCHA on iKnow!の使い方
http://code.google.com/p/captcha-on-iknow/
まだいろいろ作り込みが足りないのでgemにしたりはしないけど、かといって誰にも触ってももらえないのも寂しいので使い方を書いてみる。
上にも書いたけど、音声キャプチャはわりといい感じだと思うよ。
せっかくだしRailsアプリ生成から。
テストアプリ生成
$ rails iknow_test $ cd iknow_test $ ./script/generate scaffold Post name:string $ rake db:migrate
プラグインインストール
$ cd vendor/plugins $ svn export http://captcha-on-iknow.googlecode.com/svn/trunk/ captcha_on_iknow
Captcha on iKnow!ファイル生成
$ ./script/generate captcha_on_iknow [iknow account]
ここで指定した[iknow account]を持つユーザーが最近勉強した項目を、CAPTCHAのアイテムとして使用する。自分のを使いたくないならtechnohippyでも使ってください。
レイアウトでCSSとJSを読み込む(app/views/layouts/post.html.erb)
<%= javascript_include_tag :defaults %> <%= stylesheet_link_tag 'captcha_on_iknow' %> <!-- 追加 --> <%= captcha_on_iknow_js_tag %> <!-- 追加 -->
コントローラにキャプチャチェック用のbefore_filterを設定(app/controllers/posts_controller.rb)
class PostsController < ApplicationController iknow_captcha_check :only => ['create', 'update'] # 追加
ビューでキャプチャ表示(app/views/posts/new.html.erb)
<h1>New posts</h1> <% form_for(@posts) do |f| %> <%= f.error_messages %> <p><%= f.label :name %><br /> <%= f.text_field :name %></p> <p><%= iknow_captcha_field %></p> <!-- 追加 --> <p><%= f.submit "Create" %></p> <% end %> <%= link_to 'Back', posts_path %>
動作確認
$ ./scrpipt/server
して、http://localhost:3000/posts/new にアクセス
Createボタンを押すと、選択が正しければ登録されるし間違ってると元の画面に戻される。ちなみに元の画面に戻ったときに入力が空になるのは仕様というか手抜きなんだけど、いつか直す。
まとめ
上に書いてある通り、cssとjsの読み込みを含めてもたった4行でキャプチャが追加できるのは悪くないと思うんだけどどうだろ。