Facebook 认证推荐和 OmniAuth

发布于 2024-12-24 19:37:16 字数 497 浏览 2 评论 0原文

考虑到 Facebook 的授权代码,是否可以调用或实例化 OmniAuth?使用经过身份验证的引用 Facebook 会将 ?code=ABC... 附加到 URL。

Facebook文档指出,收到授权代码后,应该请求访问令牌,但是在浏览omniauth-facebook gem时,此代码似乎已经存在(第 64 行)。

我想要与 OmniAuth 集成的原因是为了避免为了让经过身份验证的引荐工作而重复代码。谢谢!

Is it possible to call or instantiate OmniAuth given that a authorization code for Facebook? Using authenticated referalls Facebook will append a ?code=ABC... to the URL.

Facebook documentation states that after receiving the authorization code one should then request the access token, however upon browsing through the omniauth-facebook gem this code already seems to exist (line 64).

My reason for wanting to integrate with OmniAuth is to avoid duplicating the code just to get authenticated referrals working. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

╭⌒浅淡时光〆 2024-12-31 19:37:16

查看此内容后,有两个立即可用的选项:

  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

After looking into this two immediate options are available:

  1. Redirect to the Facebook OAuth path.

  2. Use the passsed in code to manually grab all the OAuth info from Facebook.

Here was some code that does some of the OAuth steps given a code.

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
紫﹏色ふ单纯 2024-12-31 19:37:16

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

FYI, Authenticated Referrals are deprecated and will be removed in February 2013 – https://developers.facebook.com/roadmap/#february-2013

撩发小公举 2024-12-31 19:37:16

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

omniauth-facebook has implemented this, for anyone that comes across this thread.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文