“验证客户端密钥时出错。” 404与Facebook Oauth和ruby

时间:2011-01-20 23:00:23

标签: ruby facebook oauth-2.0

我正在尝试使用warden为应用程序实现facebook身份验证,之后用户允许使用facebook auth并使用令牌重定向到我的应用程序回调,同时消耗api。我的监狱长战略是:

class Facebook < Warden::Strategies::Base
  def client
    @client ||= OAuth2::Client.new MyApp::Facebook::AppID, MyApp::Facebook::AppSecret, :site => 'https://graph.facebook.com'
  end

  def params
    @params ||= Rack::Utils.parse_query(request.query_string)
  end

  def authorize_url
    client.web_server.authorize_url :redirect_uri => request.url, :scope => 'email,publish_stream'
  end

  def authenticate!
    throw(:halt, [302, {'Location' => authorize_url}, []]) unless params['code']
    facebook = client.web_server.get_access_token params['code'], :redirect_uri => request.url
  rescue OAuth2::HTTPError => e
    puts e.response.body
  end
end

Strategies.add :facebook, Facebook

打印响应正文的结果如下:

{"error":{"type":"OAuthException","message":"Error validating client secret."}}

我非常感觉应用程序ID和应用程序密码是由FB提供的。

感谢。

2 个答案:

答案 0 :(得分:23)

我已多次看到该错误消息。以下是我要仔细检查的内容:

  • 您的域名与您在facebook回调网址中列出的域名相同
  • app id是正确的(实际上是在页面上打印出来,有时是y
  • app secret是正确的

答案 1 :(得分:0)

在创建可解决此问题的Facebook对象时添加redirect_uri。

将用户重定向到https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL 用户点击允许后,它将点击我们的重定向Uri 到那时,我们将获取代码,我们需要执行服务器端HTTP到以下网址以与我们的oAuth访问令牌交换代码:

https://graph.facebook.com/oauth/access_token?      client_id = YOUR_APP_ID&redirect_uri = YOUR_URL&

 client_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE

现在,在第3步中,我继续获得Http 400响应。

因此,在进行了一些研究之后,我发现在步骤3中提交的redirect_uri上除了验证请求之外没有做任何事情。因此,该值需要与步骤2匹配。