2011-06-21 56 views
1

我正在使用OmniAuth在我的Devise基於Rails應用程序中使用Facebook Connect。一個它創建的路線是:設計更改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

我不完全確定你在問什麼,我假設你想擁有自己的回調代碼。

可以擴展色器件控制器,如:

class MyOmniauthCallbacksController < Devise::OmniauthCallbacksController 

    def facebook 
    #Custom Code here 
    end 

end 

然後你就可以在你的routes.rb這個新的控制器註冊

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

編輯:

色器件也可以乘坐'path'選項在devise_for改變路線:

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

我更新了上面的問題,以更好地解釋我的意思是自定義路線。 – randombits

+0

更新的答案,以更好地反映您的問題。 – Olives

+0

@Olives,我處於類似的位置。我們有一個rails應用程序部署到服務器上的一個子目錄,例如'https:// www.example.com/subdir /',並且在不同的服務器上它可能位於不同的子目錄中,所以我們不能硬編碼路徑。你對路徑選項的回答是非常誘人的,但是路徑是硬編碼的。不過,謝謝你的回答,我會試試這兩個選項。 – Wodin

0

如果您不滿意與色器件本身omniauthable,那麼你可能會考慮實施omn​​iauth作爲單獨的寶石,然後將其與設備綁定。 要修改路線,您可以使用:match,並將這些路線映射到omniauth_callbacks url。沒有得到你想要的原因

我想修改這個路由到一個自定義的URL。

描述你想做什麼不同的東西可用。