Ruby on rails 3 在omniauth中命名的Rails路由

Ruby on rails 3 在omniauth中命名的Rails路由,ruby-on-rails-3,devise,routes,omniauth,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

我在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)

我想我应该把我的评论转换成一个答案:

对于我们的应用程序,我们使用主干网/木偶网来实现纯json api。为了让oAuth使用Desive—我将其从Desive中删除。:)删除了我设置的omniauthable属性,并从我的初始值设定项/designe.rb中删除了omniauth设置。然后在omniauth页面上阅读,我自己实现了它

我的api位于“/api/v1”下

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

    此外,请确保将您的twitter/facebook回调设置为:

    /api/v1/auth/:provider(.:format)
    /api/v1/auth/:provider/callback(.:format)
    
    http://127.0.0.1:3000/api/v1/auth/twitter/callback

    以匹配您在dev中的路线


    希望这能帮助别人。如果我忘了一步或者你迷路了,请问我

    有没有想过?我也遇到了同样的问题。我最终从我的API消费者应用程序指向了没有API名称空间FWIW的API服务器/users/auth的ip_,我只是决定使用omniauth而不使用Desive,并将其放在我正确的名称空间中,然后手动完成身份验证后的工作。但我们也在做主干线/提线木偶,Desive也不喜欢玩它。很好,这到底是怎么回事?将评论转换为回答它对我不起作用。以下是提供者列表:
    #config/initializers/omniauth.rb Rails.application.config.middleware.use omniauth::Builder do提供者:facebook,ENV['facebook_KEY',ENV['facebook_SECRET'],:path_prefix=>“/api/v1/auth”end
    ,下面是来自rake routes=>`GET/api/v1/auth/:provider/callback(:format)的路由Desive_token_auth/omniauth_回调#omniauth_success GET/api/v1/auth/:provider(:format)redirect(301)`仍在获取此错误=>没有与[POST]匹配的路由“/api/v1/auth/facebook”