2011-06-21 16 views
1

DeviseベースのレールアプリでFacebook Connectを使用するためにOmniAuthを使用しています。それが作成するルートの一つは、次のとおりです。Deviseはuser_omniauth_callbackルートを変更します

user_omniauth_callback /users/auth/:action/callback(.:format) {:action=>/facebook/, :controller=>"devise/omniauth_callbacks"}

私はカスタムURLにこのルートを修正したいと思います。それを行うための正しい場所はどこですか?

問題はデフォルトでは、作成するルートはhttp://foo/users/auth/:action/callback.formatです。私はhttp://foo/prefix_path/users/auth/:action/callback.formatのようなカスタムを持っていたい。私は私のルートファイルは次のようになり作ってみました:

scope "/mypath" do 
    devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } 
    end 

が、それはまだ間違ったルートを生成します。

user_omniauth_callback /users/auth/:action/callback(.:format) {:action=>/facebook/, :controller=>"users/omniauth_callbacks"}

答えて

5

あなたが尋ねていることは正確にはわかりません。コールバックのための独自のカスタムコードが必要だと思います。

次のような工夫コントローラを拡張することができます。

工夫もとることができます。そして、あなたはあなたのroutes.rbを

devise_for :users, :controllers => {:omniauth_callbacks => "my_omniauth_callbacks"} 

EDITで、この新しいコントローラは、登録することができます

class MyOmniauthCallbacksController < Devise::OmniauthCallbacksController 

    def facebook 
    #Custom Code here 
    end 

end 

devise_forの 'path'オプションを使用してルートを変更します。

devise_for :users, :controllers => {:omniauth_callbacks => "my_omniauth_callbacks"}, :path => "path_prefix/users" 
+0

上記の質問を更新して、カスタムルートの意味を詳しく説明しました。 – randombits

+0

あなたの質問をよりよく反映するように答えが更新されました。 – Olives

+0

@Olives、私は似たような立場にいる。私たちは、レールアプリをサーバ上のサブディレクトリに配備しています。 'https:// www.example.com/subdir /'と異なるサーバー上では異なるサブディレクトリにある可能性があるので、パスをハードコーディングすることはできません。 :pathオプションについてのあなたの答えは魅力的ですが、パスはハードコードされています。あなたの答えをありがとう、しかし、私は両方のオプションを試してみましょう。 – Wodin

0

あなたが工夫自体にomniauthableと不満足なら、あなたが実装することも検討してくださいomn​​iauthを別の宝石とし、デバイスと結びつけるだけです。 ルートを変更するには、matchも使用して、それらのルートをomniauth_callbacks urlにマップします。理由を知りませんでした

このルートをカスタムURLに変更したいと思います。

利用可能なものと異なるものを作成します。

関連する問題