在Oails上使用Omniauth,如何更改URL?

时间:2013-04-29 17:57:35

标签: ruby-on-rails-3 devise omniauth

目前我的rake路线输出中有这两条路线:

user_omniauth_authorize
/users/auth/:provider(.:format)
devise/omniauth_callbacks#passthru {:provider=>/facebook|twitter/}
user_omniauth_callback
/users/auth/:action/callback(.:format)
devise/omniauth_callbacks#(?-mix:facebook|twitter)

我需要更改哪些文件来自定义这些文件,以便路径可以读取:

user_omniauth_authorize
/admin/manage/:slug/auth/:provider(.:format)
devise/omniauth_callbacks#passthru {:provider=>/facebook|twitter/}
user_omniauth_callback
/admin/manage/:slug/auth/:action/callback(.:format)
devise/omniauth_callbacks#(?-mix:facebook|twitter)

1 个答案:

答案 0 :(得分:2)

将以下内容添加到routes.rb文件中:

devise_for :users, :skip => :omniauth_callbacks

devise_scope :user do
    match "/admin/manage/:slug/auth/:provider",
      :constraints => { :provider => /facebook|twitter/ },
      :to => "devise/omniauth_callbacks#passthru",
      :as => :user_omniauth_authorize,
      :via => [:get, :post]

    match "/admin/manage/:slug/auth/:action/callback",
      :constraints => { :action => /facebook|twitter/ },
      :to => "devise/omniauth_callbacks",
      :as => :user_omniauth_callback,
      :via => [:get, :post]
end

现在,这是未经测试的。我从Devise's source code复制了它。所以有一些问题:

  1. 您必须将user添加到:as别名,因此它不是动态的。
  2. 您必须将auth提供程序添加到约束中,因此它不是动态的。