OmniAuthで認証やコールバックのURLを変える方法
ほとんど需要がないと思われるけどメモ。
Rails + OmniAuthで例えばTwitter認証をするとき、デフォルトで認証時のURLは /auth/twitter で、コールバックURLは /auth/twitter/callback になる。
このURLを変更するには、config/initializers/omniauth.rbにこんなふうに書く。
Rails.application.config.middleware.use OmniAuth::Builder do provider :twitter, 'TWITTER_CONSUMER_KEY', 'TWITTER_CONSUMER_SECRET', :request_path => '/sign_in', :callback_path => '/sign_in/callback' end
ほかに、:path_prefix とか :setup_path とか使えるようです。:path_prefix はデフォルトが '/auth' なので、ここだけ変えたいときにおすすめ。(といってもURL変えたい人なんてほとんどいないと思うけど)
Railsでなくても同様にproviderの記述を変えればできるはず。
参考ソース
def path_prefix options[:path_prefix] || OmniAuth.config.path_prefix end def request_path options[:request_path] || "#{path_prefix}/#{name}" end def callback_path options[:callback_path] || "#{path_prefix}/#{name}/callback" end def setup_path options[:setup_path] || "#{path_prefix}/#{name}/setup" endhttps://github.com/intridea/omniauth/blob/v0.3.0/oa-core/lib/omniauth/strategy.rb
ちなみに
Rails3レシピブックやいろんなWebの解説を見ても、routes.rbに
match "/auth/:provider/callback" => "sessions#callback"
これしか書いていないのに /auth/twitter というURLがちゃんと機能することについて全く説明がなかったので混乱してしまいました。
これは実はRackミドルウェアいうRailsとは別の仕組みなので、routes.rbは関係なかったということです。全く知らなかった…。そういえばレシピブックにも「OmniAuth は Rack ミドルウェアとして利用できます」って書いてあるし。でもわかりにくい。
Rackレベルだから別というのはわかったけど、ちょっとキモイですね。