deviseでbasic認証と通常の認証を組み合わせる場合の落とし穴
メモ。
deviseはRackというかwardenを利用した、Rails用の認証モジュール。便利なのだけれど、どうにもうまくログインができずはまった。
原因はbasic認証を併用していたこと。
現状、非公開のテスト用サイトのページにはbasic認証をかけている。Rails3では、basic認証はRails単独でも簡単に設定できる。とりあえず簡易に使用するには、config.ruファイルの「run Foo::Application」の前にこう書くだけ。
use Rack::Auth::Basic do |user, passwd| user == 'foo' && passwd == 'bar' end
ところが、deviseもデフォルトでbasic認証を見るというか、そこからユーザIDを拾ってくるのだった。むむむ。そのため、deviseでログインする際に使用したユーザIDではなく、basic認証のユーザIDが使われるようになり、誤作動が起きてしまう。
そうしないようにするためには、config/initializers/devise.rbで、以下のようにする必要がある。
config.http_authenticatable = false
これで、basic認証があってもなくても、deviseの(DBとクッキーによる)認証が利用できるようになる。