0

我一直在为移动开发人员构建一个用于 iphone 应用程序的服务器 api。我没有移动开发经验,他们也没有使用 ruby​​ on rails 的经验。我试图为应用程序构建一个移动身份验证路由,允许用户通过 facebook 登录。到目前为止,它看起来像这样:

GET '/auth/mobile/fbtoken=:facebook_token&device_id=:device_id&time_zone=:time_zone&os_type=:os_type',到:'sessions#fb_sso'

  client = OAuth2::Client.new(
  ENV['FACEBOOK_APP_ID'],
  ENV['FACEBOOK_APP_SECRET'],
  site: 'https://graph.facebook.com')
  token = OAuth2::AccessToken.new(client, params[:access_token])
  user_info = ActiveSupport::JSON.decode(token.get('/me').body)  

用于学习如何正确执行此操作的在线资源非常有限或不存在。我找到的有关如何执行此操作的唯一信息涉及使用 Devise 进行身份验证。我们的应用目前配备了 Devise(已添加并已迁移到 User 模型),但当前未通过 Devise 进行身份验证。我能够找到的唯一具体示例之一可以在这篇文章的页面底部找到:

https://www.ruby-forum.com/topic/4409930

这让我相信我在设置路线的方式上走在正确的轨道上,因为除了最后一步“使用 Devise 方法登录:sign_in @user, :event => :authentication”之外,一切都是一样的。这就是促使我尝试将 Devise 集成到我们的应用程序中的原因。

读完之后,我的意思是在某种受限状态下实现 Devise,并且只使用 sign_in 方法。不幸的是,Devise 似乎非常固执己见,更像是一种“全有或全无”的解决方案。我非常不确定如何继续以及如何决定是完全重建我们的应用程序的重要部分以支持 Devise,还是完全放弃它并尝试实施我自己的解决方案。

tl;dr 1) 是否值得重做 Rails 应用程序的很大一部分以使用 Devise?2)没有设计是否可以使这条路线工作?如何?

4

1 回答 1

0

如果您只想让您的用户通过 Facebook 登录,那么 Devise 将是不必要的,因为您只需将 Facebook 的 API 与 Koala 或 Omniauth 一起使用来验证用户身份。另一方面,如果您希望非 Facebook 用户使用您的应用程序,我认为没有理由不能同时使用 Devise 来获得自己的身份验证和 Facebook 身份验证;您只需要任何一种形式的身份验证来创建会话。

如果我理解正确,链接底部的解决方案不会使用 Devise 进行 Facebook 身份验证,而是用于在某人的 FB 帐户经过身份验证时创建会话。似乎是一种合理的方式。

要回答您的 TL/DR:

1) 仅当您计划同时使用 Facebook 登录和传统登录时。2) 是的。只需将这些 GET 参数提供给 Omniauth 或 Koala 等 gem,并在用户通过身份验证后创建会话。

于 2014-01-19T04:27:55.397 回答