在omniauth中命名空间的Rails路由

时间:2013-04-02 05:07:09

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

我在routes.rb中有这个:

namespace :api do
  namespace :v1 do
    ...
    devise_for :users, constraints: { format: :json },
      :controllers => { :omniauth_callbacks => "auths" }
    ...
  end
end

并产生这些路线:

new_api_v1_user_confirmation GET        /api/v1/users/confirmation/new(.:format)          api/v1/confirmations#new {:format=>:json}
                             GET        /api/v1/users/confirmation(.:format)              api/v1/confirmations#show {:format=>:json}
api_v1_user_omniauth_authorize            /users/auth/:provider(.:format)                   auths#passthru {:provider=>/facebook|twitter|linkedin/, :format=>:json}
api_v1_user_omniauth_callback            /users/auth/:action/callback(.:format)            auths#(?-mix:facebook|twitter|linkedin) {:format=>:json}

如何将最后两条路由命名为:

/api/v1/auth/:provider(.:format)
/api/v1/auth/:provider/callback(.:format)

1 个答案:

答案 0 :(得分:2)

猜猜我应该将我的评论转换成答案:

对于我们的应用程序,我们正在使用backbone / marionette进行纯json api的事情。为了让oAuth与设计合作 - 我从设计中删除了它。 :)删除了我设置的omniauthable属性,并从我的initializers / devise.rb中删除了omniauth设置。然后在omniauth页面上阅读我自己实现它。

我的api生活在“/ api / v1”

之下
  1. 创建了包含我的提供者和密钥的initializers / omniauth.rb文件。对于每个提供商,我还给它一个:path_prefix =>“/ api / v1 / auth”属性。
  2. 在我的api中创建一个名为api / v1 / oauth_controller.rb的回调控制器。这是使用模块正确命名空间并包含来自服务的回调路径。
  3. 更新了我的路由以设置omni的回调路由。见这里:gist.github.com/DaveSanders/5835642
  4. 在OAuthController.create中,我从提供者处获取了详细信息,并完成了“社交网络用户是否存在并拥有映射帐户?”的基本流程。如果是这样,请通过devise的user.sign_in登录?如果没有,请创建用户,然后对其进行登录。
  5. 重定向回我的应用程序,然后再次启动主干网,然后可以获取登录的用户详细信息并根据需要使用它们。
  6. 您的实施可能会有所不同,但我处理我的oAuth帐户的方式是将它们放在自己的表格中(Twitters,Facebook等),然后将它们链接到我的设计用户。这样我可以关联多个帐户,用户可以使用其中任何一个登录。

    另外,请务必将您的twitter / facebook回调设置为:

    http://127.0.0.1:3000/api/v1/auth/twitter/callback

    匹配您在开发区的路线。

    希望这有助于他人。如果我忘记了一步或你迷路了,请问。