Deviseに独自のstrategyを入れる
結論
deviseのデフォルトに沿わない場合は、deviseはいらない。
結局 ほぼwardenだけの話
config/initializers/devise.rb
require 'devise/strategies/media_authenticatable'
~~~
config.warden do |manager|
manager.default_strategies(scope: :user).unshift :user_authenticatable
manager.strategies.add(:user_authenticatable,
Devise::Strategies::UserAuthenticatable)
end
app/models/devise/strategies/user_authenticatable.rb
require 'devise/strategies/authenticatable'
module Devise
module Strategies
class MediaAuthenticatable < Authenticatable
def authenticate!
# 認証ロジックをかく
end
def valid?
# 認証をする条件を書く
end
end
end
end
これだけかな。
残念なところ
Devise.add_moduleの流儀に従って、モジュールを追加し、strategyだけを追加したくても、モデルが必須だったり(空実装でも定義だけ必要になる)、 DeviseControllerを継承したコントローラーを作ろうとして、routingをadd_moduleから設定しようとした場合、ルーティングを設定するメソッドの実装がActionDispatch::Routingを拡張して書く必要があったり。
まとめ
なんか、そこまでがんばり必要がなさすぎるな。と。 moduleは自分で拡張するものではないんだろうな。
wardenに直接追加するんだったら deviseとは?となる。 もやもやするライブラリだ。