Edited at

OmniAuthにnamed routesを設定する

More than 5 years have passed since last update.

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を返すルーティングを作り、そこに名前を設定している。