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とは?となる。 もやもやするライブラリだ。