Facebook SDK iOS connect的Rails api身份验证?

Facebook SDK iOS connect的Rails api身份验证?,ios,ruby-on-rails,ruby,api,ruby-on-rails-4,Ios,Ruby On Rails,Ruby,Api,Ruby On Rails 4,我计划使用rails api为iOS移动应用程序提供JSON api供其使用。过程: 用户打开移动应用程序 用户点击Facebook connect 移动应用程序获取fb_访问_令牌并将其发布到API服务器以识别用户 API服务器使用fb_access_令牌在Facebook上获取用户配置文件 API服务器创建并查找用户,然后使用此特定用户的API_令牌进行响应 移动应用程序使用api_令牌响应进行所有通信 哪个身份验证应该是此应用程序的最佳选项?oAuth2还是BasicAuth?我在door

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

  • 用户打开移动应用程序
  • 用户点击Facebook connect
  • 移动应用程序获取fb_访问_令牌并将其发布到API服务器以识别用户
  • API服务器使用fb_access_令牌在Facebook上获取用户配置文件
  • API服务器创建并查找用户,然后使用此特定用户的API_令牌进行响应
  • 移动应用程序使用api_令牌响应进行所有通信

  • 哪个身份验证应该是此应用程序的最佳选项?oAuth2还是BasicAuth?我在doorkeeper中尝试了rails api,但它无法立即运行,因为doorkeeper需要一些资产。

    我正在为这个与Desive集成的应用程序进行基本身份验证

    首先,我从移动应用程序(access_令牌和其他东西)获取post参数

    然后我使用OpenAPI从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更改为“”

    ,我会在尝试时给出,因为它使用OAuth2并且非常容易使用。所有omniauth策略都是rails中间件,因此您只需将
    gem'omniauth facebook'
    添加到gem文件中,并将以下内容添加到
    config/initializers/omniauth.rb
    中,就可以使用
    /auth/facebook
    通过facebook登录并
    /auth/facebook/callback
    创建用户会话(您可能需要更改:display键值,因为手机中的弹出窗口可能不美观):


    facebook身份验证令牌将位于
    request.env['omniauth.auth'][:credentials][:token]
    返回回调端点,您可以将其集成到移动身份验证策略中。有关更多详细信息,请参阅上面的链接和。

    创建用户后,如何创建api密钥?以及如何在基本身份验证中使用api密钥?我不需要api密钥。我从移动设备获取访问令牌设备(在那里我使用api密钥和密码来获取用户访问代码)。在服务器上,我存储了从Facebook获得的数据,在下一次提交access_令牌时,我只需检查数据库中是否已经存在该用户。或者你是指其他什么?我知道访问FB的客户端id和密码,但在你从手机获得access_令牌并发送到服务器后。然后,服务器检查以创建用户或使用现有用户。Wh您是否回复了手机?用户登录后,手机和服务器之间的所有通信,您是否仍然使用从facebook手机上获得的访问令牌,或者您是否使用自己的密钥/代码来识别用户?我对此进行了一些定制,但我会将用户id和安全代码(由我自己生成)发送回手机…应用程序中的所有其他通信都是通过用户id连接的,并通过安全代码进行验证…我只在用户登录Facebook时使用access_令牌。我知道omniauth,但我觉得它更像是web客户端应用程序。我需要找出如何保护我的API的解决方案。实际上,它只是Rails中间件和works非常支持Rails API,无论该API是通过桌面还是移动设备使用。请查看此报告:
    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