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"
    end
https://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レベルだから別というのはわかったけど、ちょっとキモイですね。