RailsでOmniAuthを導入すると自動的にGET /auth/:provider
がマウントされるけども、これにはルーティング名が設定されていないのでredirect_to hoge_url
みたいなことができない。
Creating authentication named routesによると、次のようにconfig/routes.rb
にすれば名前を設定できる。
match '/auth/:provider', to: lambda{|env| [404, {}, ["Not Found"]]}, as: 'auth'
こうすることでauth_url(provider: "twitter")
というような使い方ができるようになる。
ちなみにOmniAuthとRails間のリクエストの流れは、Railsのルーティングにマッチしなければ(404ならば)OmniAuthにお任せするというものになっている。これはRackミドルウェア間の流れそのもの(だと思う)。
それを利用して、上記コードでは意図的に404を返すルーティングを作り、そこに名前を設定している。