设计更改user_omniauth_callback路由

时间:2011-06-21 19:16:33

标签: ruby-on-rails devise

我正在与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"}

2 个答案:

答案 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。没得到你想要的原因

  

我想将此路线修改为自定义网址。

描述你想要的东西不同。