"Ошибка проверки секретности клиента". 404 с Facebook Oauth и рубином

Я пытаюсь реализовать аутентификацию facebook для приложения с надзирателем, после того как пользователь разрешает аутентификацию facebook и перенаправляет на обратный вызов моего приложения с токеном, я получаю 400, потребляя 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."}}

Я довольно уверен, что идентификатор приложения и секрет приложения - это те, которые предоставляются FB.

Спасибо.

Ответ 1

Я видел это сообщение об ошибке много раз. Вот что я бы дважды проверял:

  • ваш домен совпадает с тем, что вы указали в URL-адресе обратного вызова facebook
  • Идентификатор приложения правильный (на самом деле распечатать его на странице, иногда y
  • секрет приложения правильный

Ответ 2

Добавьте redirect_uri при создании объекта facebook, чтобы исправить проблему.

Перенаправить пользователя на https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL После того, как пользователь нажмет кнопку "Разрешить", он попадет на наш перенаправленный В этот момент мы получим код и нам нужно выполнить HTTP Get 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.

Поэтому после некоторого исследования я обнаружил, что на том redirect_uri, который мы представили на шаге 3, ничего не делается, кроме проверки запроса. Таким образом, значение должно совпадать с шагом 2.