ゆきひろ認証プラグイン(acts_as_yukihiro_ninshoable)
Ruby会議2007、もとい、Reject会議2007で発表されたベーパーウェアのアイデアに感銘を受け、いきおいまかせに実装してしまいました。反省はしていない。
このRailsプラグインをインストールすると素人がまつもとゆきひろさんの名前をよく「ひろゆき」と間違えることを利用してユーザーを認証できるようになります。まぁ認証失敗してももう一度聞かれるだけなので、最大二回で確実にログインできますけど。「なんに使うんだ?」とかそういうことは聞いちゃ駄目。
インストール
1. 下記コマンドを実行してゆきひろ認証プラグインをインストールする
./script/plugin install svn://rubyforge.org/var/svn/yukihiro-ninsho/vendor/plugins/yukihiro_ninsho
2. コントローラーでこんな感じに宣言する
class ApplicationController < ActionController::Base acts_as_yukihiro_ninshoable
3. 認証されてない状態でページを表示しようとしてこうなると成功
ソースコード
ソースをTxDに上げてみたんだけど、なんだかクソ重い上にすぐ落ちるのでRubyForgeに申請中。待ちきれない場合は自分で作ってみるといいと思うよ。
必要なファイルはたった二つだけ。
(RubyForgeに登録したけど、一応コードは残しておきます)
# vendor/plugins/yukihiro_ninsho/init.rb require 'yukihiro_ninsho'
# vendor/plugins/yukihiro_ninsho/lib/yukihiro_ninsho.rb class ActionController::Base def self.acts_as_yukihiro_ninsho(*args) define_method :yukihiro_check do if params[:action] == 'yukihiro_login' yukihiro_login elsif params[:action] == 'yukihiro_check' yukihiro_render_check elsif session[:i_love_ruby] == :ofcourse true else yukihiro_render_check end end define_method :yukihiro_render_check do params[:action] = 'yukihiro_welcome' if params[:action] == 'yukihiro_login' params[:only_path] = false render :inline => <<-end_of_template <% form_tag :action => 'yukihiro_login', :from => url_for(params) do %> <h4>Rubyを開発したのは次のうちどちら?</h4> <%= select_tag :matz, options_for_select( [['まつもとゆきひろ', 'yukihiro'], ['まつもとひろゆき', 'hiroyuki']]), :size => 2, :style => 'border:1px solid gray' %> <br/> <%= submit_tag 'ログイン' %> <% end %> end_of_template false end define_method :yukihiro_login do if params[:matz] == 'yukihiro' session[:i_love_ruby] = :ofcourse redirect_to params[:from] and return false else yukihiro_render_check end end define_method :yukihiro_logout do session[:i_love_ruby] = nil redirect_to :action => 'yuhikiro_check' end define_method :yukihiro_welcome do render :inline => <<-end_of_template <h4>無事に認証されました</h4> <%= link_to 'ログアウト', :action => 'yukihiro_logout' %> end_of_template end before_filter *(args.unshift(:yukihiro_check)) end end
※ 注意
まともなテストはしてません。ご利用は自己責任で。っていうか、ネタ以外のなにものでもないので、(そんな人いないと思うけど)これで何かを認証できたりすることは期待しないでください。
※ さらに注意
「ゆきひろ認証」でググって来た人がいたら、「http://www.coins.tsukuba.ac.jp/~i021179/blog/20070613」がReject会議での元ネタなので注意してくださいね