2011-05-06 92 views
0

我试图将Facebook连接添加到我们的Web应用程序,并且遇到了问题。一切工作正常本地(我可以通过Facebook的身份验证),但是当我的代码推到我们的开发服务器(生活在野外),每次我尝试验证它返回以下错误代码:Rails:尝试连接到Facebook时,OAuth2 gem返回400错误

OAuth2::HTTPError: Received HTTP 400 during request 

这是我得到的唯一解释。再次,这在我的本地机器上运行,以及盒子之间的宝石和这种匹配,所以我有点困惑。这是我正在执行的代码。

def facebook_connect 
    #Set the scope we want to pull from Facebook, along with the callback URL 
    options = { 
    :redirect_uri => facebook_callback_url, 
    :scope => "email,publish_stream" 
    } 

    #Go out and fetch the url 
    client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_SECRET, {:site => FACEBOOK_API_URL, :access_token_method => :post}) 
    #Redirect to the callback for processing 
    redirect_to client.web_server.authorize_url(options) 
end 

def facebook_callback 
    #Client URL 
    client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_SECRET, {:site => FACEBOOK_API_URL, :access_token_method => :post}) 

    #Parse out the access token 
    access_token = client.web_server.get_access_token(params[:code], :redirect_uri => facebook_callback_url) 

    #Get the user 
    fb_user = JSON.parse(access_token.get('/me')) 

    #Do some authentication database stuff 
end 

def facebook_callback_url 
    uri = URI.parse(request.url) 
    uri.path = '/users/facebook_callback' 
    uri.query = nil 
    uri.to_s 
end 

我搜索了Google,但显示的解决方案无效。另外,如果有人知道如何解析和显示OAuth2错误,我也会很感激。谢谢

回答

0

问题实际上结束了与“法拉第”宝石的问题。我们的开发服务器没有设置为处理SSL,它返回一个错误代码。我们修补它使用了以下的答案:

OmniAuth & Facebook: certificate verify failed

0

假设Facebook OATH知道您的服务器的IP地址(他们对此非常严格),我建议您使用'rescue'来捕获该异常,获取回溯,然后找到它在哪里被提出并放置一堆调试语句来检查请求和响应的状态,以及访问令牌。

或者你可以配置的RubyMine或NetBeans的远程调试这不是一件容易的事:)

+0

这就是问题的一部分 - 我不知道如何捕捉/显示的错误/异常。 – 2011-05-07 00:58:53

+0

如果它在你的行之后不是很明显,那么会抛出异常,把大量的调试语句放进去。我怀疑它是你的access_token.get调用。将其包装在开始/救援中并对错误进行回溯 – 2011-05-07 01:04:47

相关问题