我在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 与 devise 一起使用 - 我将其从 devise 中删除了。 :) 删除了我设置的omniauthable 属性,并从我的initializers/devise.rb 中删除了omniauth 设置。然后在omniauth页面上阅读我自己实现了它。
我的 api 位于“/api/v1”下
- 创建了initializers/omniauth.rb 文件,列出了我的提供程序和密钥。对于每个提供程序,我还给了它一个 :path_prefix=>"/api/v1/auth" 属性。
- 在我的 api 中创建一个名为 api/v1/oauth_controller.rb 的回调控制器,该控制器已使用模块正确命名,并包含来自服务的回调路径。
- 更新了我的路线以设置全向回调路线。请参阅此处:gist.github.com/DaveSanders/5835642
- 在 OAuthController.create 中,我使用了来自提供商的详细信息,并完成了“社交网络用户是否存在并拥有映射帐户?”的基本流程。如果是这样,请通过 devise 的 user.sign_in 登录它们?如果没有,请创建用户然后登录。
- 重定向回我的应用程序,然后再次启动主干网,然后可以获取登录的用户详细信息并根据需要使用它们。
您的实现可能会有所不同,但我处理 oAuth 帐户的方式是将它们放入自己的表中(Twitter、Facebook 等),然后将它们链接到我的设备用户。这样我就可以关联多个帐户,并且用户可以使用其中任何一个帐户登录。
另外,请务必将您的 twitter/facebook 回调设置为:
http://127.0.0.1:3000/api/v1/auth/twitter/callback
以匹配您在开发中的路线。
希望这对其他人有帮助。如果我忘记了一个步骤或者你迷路了,请询问。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)