Facebook SDK iOS 连接的 Rails-api 身份验证?

问题描述 投票:0回答:2

我计划使用rails-api 为iOS 移动应用程序提供JSON API 来使用。过程:

  1. 用户打开移动应用程序
  2. 用户点击 Facebook 连接
  3. 移动应用程序获取
    fb_access_token
    并将其发布到API服务器以识别用户
  4. API 服务器使用
    fb_access_token
  5. 获取 Facebook 上的用户个人资料
  6. API 服务器创建并查找用户,然后使用该特定用户的 api_token 进行响应
  7. 移动应用程序使用
    api_token
    响应进行所有后续通信。

哪种身份验证应该是此应用程序的最佳选择? oAuth2 还是 BasicAuth?我尝试了带有doorkeeper的rails-api,但它不能开箱即用,因为doorkeeper需要一些资产。

ios ruby-on-rails ruby ruby-on-rails-4
2个回答
4
投票

我正在为此与设备集成进行基本身份验证。

首先,我从移动应用程序获取发布参数(access_token 和其他内容)。

然后我使用 open-api 从 facebook 获取用户详细信息:

    url = "https://graph.facebook.com/me?access_token="
    begin
      content = open(URI.encode(url + params[:user][:access_token]))
    rescue OpenURI::HTTPError #with this I handle if the access token is not ok
      return render :json => {:error => "not_good_access_token" }
    end

现在 Facebook 返回响应

  status = content.status[0]
  content = ActiveSupport::JSON.decode(content)

  if status == "200"
    #get the email and check if the user is already in the database. If there is not email, check by the facebook id
    #If the user exists return the user. If the user does not exists create new

希望这有帮助

您也可以为 google 使用相同的代码,只需将 url 更改为“https://www.googleapis.com/oauth2/v2/userinfo?access_token=


2
投票

我会尝试使用 omniauth-facebook,因为它使用 OAuth2 并且非常易于使用。所有的omniauth策略都是rails中间件,所以你只需要将

gem 'omniauth-facebook'
添加到你的gemfile中,并将以下内容添加到
config/initializers/omniauth.rb
,你就可以使用
/auth/facebook
通过facebook登录,并使用
/auth/facebook/callback
创建用户会话(您可能想要更改 :display 键值,因为移动设备中的弹出窗口可能不美观):

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],
           :scope => 'email,user_birthday,read_stream', :display => 'popup'
end

Facebook 身份验证令牌将位于返回到您的回调端点的

request.env['omniauth.auth'][:credentials][:token]
中,您可以将其集成到您的移动身份验证策略中。请参阅上面的链接和 omniauth 主页 了解更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.