在用户允许Facebook auth并将其重定向到我的应用回调之后,我正在尝试使用Warden的应用程序来实施Facebook身份验证,并使用令牌回调我在消费API时获得了400。我的看守策略是:

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和App Secret是FB提供的。

谢谢。

有帮助吗?

解决方案

我已经看到了多次错误消息。这是我会仔细检查的事情:

  • 您的域与您在Facebook回调URL中列出的域相同
  • 应用程序ID是正确的(实际上将其打印在页面上,有时是y
  • 应用程序秘密正确

其他提示

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

将用户重定向 https://www.facebook.com/dialog/oauth?client_id= your_app_id&redirect_uri= your_url用户单击“允许”之后,当时它将打到我们的重定向URI,我们将获得代码,我们需要执行服务器端http到达以下URL,以与我们的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匹配。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top