我正在与OmniAuth合作,在我的基于Devise的rails应用程序中使用Facebook Connect。它创建的路线之一是:
user_omniauth_callback /users/auth/:action/callback(.:format) {:action=>/facebook/, :controller=>"devise/omniauth_callbacks"}
我想将此路线修改为自定义网址。哪个地方适合这样做?
问题是默认情况下,它创建的路线是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"}
答案 0 :(得分:5)
我不确定你在问什么,我假设你想拥有自己的回调自定义代码。
您可以扩展设计控制器,例如:
class MyOmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
#Custom Code here
end
end
然后你可以在routes.rb
中注册这个新的控制器devise_for :users, :controllers => {:omniauth_callbacks => "my_omniauth_callbacks"}
编辑:
设计也可以在devise_for中选择'path'选项,以便更改路径:
devise_for :users, :controllers => {:omniauth_callbacks => "my_omniauth_callbacks"}, :path => "path_prefix/users"
答案 1 :(得分:0)
如果您对设计中的omniauthable不满意,那么您可以考虑将omniauth实现为单独的gem,然后将其与设备绑定。 要修改路由,您可以使用:match,并将这些路由映射到omniauth_callbacks url。没得到你想要的原因
我想将此路线修改为自定义网址。
描述你想要的东西不同。