【问题标题】:Facebook Authenticated Referrals and OmniAuthFacebook Authenticated Referrals 和 OmniAuth
【发布时间】:2012-11-08 16:52:45
【问题描述】:

鉴于 Facebook 的授权码,是否可以调用或实例化 OmniAuth?使用经过身份验证的引用 Facebook 将在 URL 中附加一个?code=ABC...

Facebook documentation 声明在收到 授权码 后应请求 访问令牌,但是在浏览omniauth-facebook gem 时,此代码似乎已经exist(第 64 行)。

我想要与 OmniAuth 集成的原因是为了避免重复代码以使经过身份验证的推荐正常工作。谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby facebook omniauth


    【解决方案1】:

    查看这两个直接选项后:

    1. 重定向到 Facebook OAuth 路径。

    2. 使用传入的代码手动从 Facebook 获取所有 OAuth 信息。

    这里有一些代码,可以在给定代码的情况下执行一些 OAuth 步骤。

    require 'httparty'
    require 'fb_graph'
    
    def self.get_access_token(code, redirect_uri)
      redirect_uri = remove_code_from_redirect_uri(redirect_uri)
    
      response = HTTParty.get(ACCESS_TOKEN_URL, query: { code: code, client_id: FB_APP_ID, client_secret: FB_APP_SECRET, redirect_uri: redirect_uri })
      return unless response.success?
    
      results = Hashie::Mash.new
      response.body.split('&').each do |param| key, value = param.split('='); results[key] = value; end
      return results.access_token
    end
    
    def self.get_auth(access_token)
      user = FbGraph::User.me(access_token).fetch
    
      results = Hashie::Mash.new
      results['info'] = Hashie::Mash.new
      results['credentials'] = Hashie::Mash.new
    
      results['uid'] = user.identifier
    
      results['info']['name'] = user.name
      results['info']['email'] = user.email
      results['info']['image'] = user.picture
      results['info']['nickname'] = user.username
    
      results['credentials']['token'] = access_token
    
      return results
    end
    
    private
    
    def self.remove_code_from_redirect_uri(redirect_uri)
      url, params = redirect_uri.split("?")
      params = params.split('&').inject({}) { |hash, param| k, v = param.split('='); hash[k] = v; hash }
      params.delete("code")
      url + '?' + CGI::unescape(params.to_query)
    end
    

    【讨论】:

      【解决方案2】:

      仅供参考,经过身份验证的推荐已被弃用,并将于 2013 年 2 月被删除 – https://developers.facebook.com/roadmap/#february-2013

      【讨论】:

      • 谢谢。也注意到了这一点。
      【解决方案3】:

      omniauth-facebook 已经为遇到此线程的任何人实现了此功能。

      【讨论】:

      • 您可以简单地重定向到 /auth/facebook 并且从 facebook 返回(对我来说) /auth/facebook/callback?code=.... Omniauth-facebook 然后通过 oauth2 获取身份验证令牌并填充omniauth 哈希-您不必做任何特别的事情。因此,如果 facebook 即将用户发送到您的根页面,例如 example.com/?code=... 将其重定向到 auth/facebook/callback/?code=... 这应该可以解决问题。希望对您有所帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多