Basic認証を使ってみた。

2.0の新機能は色々あるみたいだけど、なんとなく目を引いた&簡単そうだったので、
Basic認証を使ってみた。

class TestController < ApplicationController
  before_filter :authenticate
  def index
  end

private
 def authenticate
   authenticate_or_request_with_http_basic do |user_name, password| 
     user_name == 'TEST' && password == 'PASS'
   end
 end
end

あと、app/views/test/index.rhtmlに、適当にtestとか記述して*1
試してみる。


DB作ってなかったのでちょっとエラーでたけど、
適当にtest2_developmentとかDB作ってテスト。

ベーシック認証できたよー。


2点ほど気になった

  1. エラーメッセージしょぼいお
  2. ずっとBASIC認証のターン!

とりあえずエラーメッセージがしょぼいのでソースコード見てみる。
vendor/rails/actionpack/lib/action_controller/http_authentication.rb
でやってるぽい。


と思ったらエラーメッセージ固定値ぽいー。
124行目で返してる。


BASIC認証だし、固定の内容で良いのかなあ・・・


というわけでソースコードちょっと変えてみた。

class TestController < ApplicationController
  before_filter :authenticate
  
  def index
  end

private
 def authenticate
   authenticate_or_request_with_http_basic do |user_name, password|
     if user_name == 'TEST' && password == 'PASS'
       @login = "成功したよ!!"
     else
       @login = "失敗したよ!!"
     end 
   end 
 end 
end

これで1回だけ認証する形&エラー表示できる様に


まぁ、フィルターの書き方とauthentication_request書き換えてあげれば
結構実現できそうって事で。

*1:render :textの方が良い気もする