【问题标题】:Problems with OAuth 2 GemOAuth 2 Gem 的问题
【发布时间】:2011-06-16 09:42:23
【问题描述】:

我有一个使用https://github.com/intridea/oauth2 的rails 项目。在我的 Rails 应用程序中,我有以下代码:

ApplicationController.rb

def facebook_client
  OAuth2::Client.new(FacebookOauthCredentials::APP_ID, FacebookOauthCredentials::APP_SECRET, :site => 'https://graph.facebook.com')
end

FacebookController.rb

def facebook_session_create(poster, featured_item)
  redirect_to facebook_client.web_server.authorize_url(:scope => 'publish_stream', :redirect_uri => "http://localhost:3000/facebook/facebook_callback")
end

def facebook_callback

  if(params[:code])
    begin
      access_token = facebook_client.web_server.get_access_token(params[:code], :redirect_uri => "http://localhost:3000/facebook/facebook_callback")

      access_token.post('/me/feed', "testing #{rand(1000)}")
    rescue OAuth2::HTTPError => e
      render :text => e.response.body
    end
  end
end

每次我运行这段代码时都会得到这个响应:

{"error":{"type":"OAuthException","message":"Error validating verification code."}}

但是,我使用 OAuth2 gem 的自述文件中提供的 sinatra 应用程序,它工作正常。

def client
  OAuth2::Client.new(FacebookOauthCredentials::APP_ID, FacebookOauthCredentials::APP_SECRET, :site => 'https://graph.facebook.com')
end

get '/auth/facebook' do
   redirect client.web_server.authorize_url(
    :redirect_uri => redirect_uri,
    :scope => 'publish_stream'
  )
end

get '/auth/facebook/callback' do
  access_token = client.web_server.get_access_token(params[:code], :redirect_uri =>   redirect_uri)

  begin
    user = JSON.parse(access_token.post('/me/feed', :message => "testing # {rand(10000)}"))
  rescue Exception => e
    return e.response.body
  end

  user.inspect
end

def redirect_uri
  uri = URI.parse(request.url)
  uri.path = '/auth/facebook/callback'
  uri.query = nil
  uri.to_s
end

我尝试使用 irb 重现这些步骤,但出现 http 400 错误。我不确定这是否与 rails 应用程序的原因相同,或者是因为我正在混合控制台和 Web 浏览器操作。任何建议将不胜感激。

【问题讨论】:

  • 您是否使用有效的回调 url 配置您的 facebook 应用程序并使用此回调 url?
  • facebook中配置的回调url为localhost,回调域配置为localhost。

标签: ruby-on-rails ruby facebook oauth


【解决方案1】:

我在这个页面上找到了我的问题的答案Facebook graph API - OAuth Token

我遇到了完全相同的问题,但是 原来问题不是 redirect_uri 的编码 参数,或者我有一个尾随 斜线或问号很简单 我通过了两个不同的 重定向网址(尚未阅读 规范)。

redirect_uri 仅用作 重定向一次(第一次)到 重定向回依赖方 使用“代码”令牌。第二次, redirect_uri 被传回 身份验证服务器,但这次不是 按您的预期使用(重定向) 而是由身份验证使用 服务器验证代码。服务器 以 access_token 响应。

您会注意到 Facebook 文档 (这很糟糕)说 fetch “通过以下方式将其交换为访问令牌 取…… "

总之,我不必编码或 对 Uri 做任何特别的事情,只是 两次传入相同的redirect_uri, 并获取第二页以获取 access_token 里面。

我没有正确复制我的原始代码,并且我为获取代码而传递的重定向 uri 与我为获取访问令牌而传递的 uri 不同。 Facebook 的 API 文档很糟糕 :(

【讨论】:

    【解决方案2】:

    我遇到了这个问题/错误,但最终找到了一个不同的解决方案(通过比较我的 Dev 应用程序设置)和我的 prod 应用程序设置(它产生了这个错误)。

    我在 Facebook Developer 应用程序中转到了我的应用程序的高级设置页面: https://developers.facebook.com/apps/YourAppID/advanced

    然后我找到“加密访问令牌:”设置并将其设置为“启用”。

    【讨论】:

      猜你喜欢
      • 2010-12-04
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 2021-04-25
      • 2014-06-28
      • 1970-01-01
      相关资源
      最近更新 更多