QA@IT

Railsでomniauthを使用時にパスの重複を回避する方法

3466 PV

omniauth-twitterを使いTwitterの認証行っている状態で

routes.rb で
get :id/:list_id => 'controller#method'
というルーティングを行って

omniauthが生成する /auth/twitter というパスを開くと
このルーティング側に飛ばされてしまいます。

/auth/twitter を明示的にroutes.rb で示す方法はないでしょうか?

以前、同じ質問StackoverFlowでしたのですが、
その時はdeviseも同時に使っていて認証に使うパスが変わっていたのが原因でした。
http://stackoverflow.com/questions/16848876/how-to-change-auth-provider-path-by-omniauth

当時もらった回答も試して見ましたが、callback URLではなく
"auth/twitter"が問題だと思いますので:id/:list_idで示された方に移動してしまいます。

回答

手元では :id/:list_id のルーティングがあっても /auth/twitter はTwitterに遷移したのですが…、

get ':id/:list_id', to: 'controller#method', constraints: ->(req) { req.path != '/auth/twitter' }

のようにして /auth だったら問題のルーティングに向かわないように強制してみてはいかがでしょうか。

編集 履歴 (1)
  • ありがとうございます。constraints を指定することができるのですね。

    ただ、sakuroさんの環境では何もしなくてうまくいくということなので試してみたら自分の環境でも正常に遷移してしまいました…。
    -
  • 動かなかった時は /auth/twitter を 呼び出した時に :id/:list_id で指定したメソッドが呼び出されてて、`get :id/:list_id => 'controller#method'`をコメントアウトしたらTwitterの認証画面に遷移できたのですが、何が悪かったのかわからず気持ち悪いですが何にせよ無事に動くようになりました。ありがとうございます。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。