не могу авторизоваться на Facebook - PullRequest
7 голосов
/ 16 марта 2012

Я следую инструкциям Райана Бэйта по использованию Omniauth для настройки сторонней аутентификации, за исключением того, что я пробую это с Facebook, а не с Twitter, который он настроил в RailsCast 235.

После установки гема omniauth-facebook и настройки инициализатора

Rails.application.config.middleware.use OmniAuth::Builder do
    provider :facebook, 'APP_ID', 'APP_SECRET'

end

Я должен иметь возможность перейти на localhost: 3000 / auth / facebook и быть представленным с логином Facebook (даже если это в конечном итоге не сработает, потому что мы еще не настроили URL обратного вызова). Однако, когда я иду на этот URL я получаю эту ошибку

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

и URL фактически меняется на

https://graph.facebook.com/oauth/authorize?response_type=code&client_id=APP_ID&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Ffacebook%2Fcallback&scope=email%2Coffline_access

В своем приложении я настроил Devise и следовал инструкциям на вики Devise для интеграции авторизации Facebook https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

Может кто-нибудь сказать мне, в чем может быть проблема?

Выполнение поиска в Google по сообщению об ошибке показало, что довольно много людей сталкивались с этой проблемой в последние недели, но не смогли найти никого, кто мог бы найти решение enter image description here

Ответы [ 4 ]

7 голосов
/ 22 марта 2012

Я искал 101 и наткнулся на эту страницу .Как видите, эта ошибка означает Неверный ключ API , поэтому я считаю, что проблема заключается в том, где вы определили свой ключ.

Вы должны настроить свой ключ и свой секрет вотдельный файл (для ясности и безопасности), но помните, что Rails загружает файлы в в алфавитном порядке , поэтому у файла, который определяет эти константы, должно быть имя, которое стоит перед файлом, который конфигурирует oauthподключение.В моем случае я создал файл с именем constants.rb, который предшествует devise.rb.Кроме того, убедитесь, что этот файл недоступен для контроля версий.Вы не хотите, чтобы у других людей были ваши ключи и секреты.

# config/initializers/constants.rb
FACEBOOK_KEY = 'string'
FACEBOOK_SECRET = 'string'

Затем настройте соединение в файле devise, если вы используете devise, или в файле omniauth, если вы используете простой omniauth:

# config/initializers/devise.rb|omniauth.rb
require 'omniauth-facebook'
config.omniauth :facebook, FACEBOOK_KEY, FACEBOOK_SECRET

Теперь есть лучший способ сделать это, используя переменные ENV.Я рекомендую Figaro gem , поскольку он действительно упрощает настройку приложений.

Если вы хотите отобразить диалоговую страницу facebook в виде всплывающего окна, вам нужно будет использовать

config.omniauth :facebook, FACEBOOK_KEY, FACEBOOK_SECRET, :display => 'popup'

И следуйте этому вопросу позже по дороге.

И, если вы работаете в Windows, вам понадобится сертификат, чтобы соединение SSL не прерывалось.Решение этой проблемы разъясняется Arcolye здесь .

Наконец, для локального тестирования входа в систему все, что вам нужно сделать, это определить URL вашего сайта как http://localhost:3000/.Это все, что есть.Вы не должны определить URL своего холста.

3 голосов
/ 19 марта 2012

В прошлом у меня была проблема с использованием localhost с приложениями Facebook. В итоге я создал запись в файле хоста на моем компьютере, которая указала бы fbdev.com на localhost и просто использовала «fbdev.com» вместо localhost в настройках приложения на facebook.

1 голос
/ 19 апреля 2012

Я получаю ту же ошибку, но я забыл перезапустить сервер после добавления моего APP_ID и APP_SECRET :-P Может, это поможет?

0 голосов
/ 16 марта 2012

Во-первых, убедитесь, что у вас есть следующее в routes.rb:

# Auth callback routes
match '/auth/:provider/callback' => 'sessions#create' # This route is hit when a user gives the app permissions (the auth hash will be in request.env['omniauth.auth'])
match '/auth/failure' => 'sessions#failure' # This route is hit when a user doesn't give the app permissions

Во-вторых, убедитесь, что в config/initializers/omniauth.rb указано следующее:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, 'APP_ID', 'APP_SECRET', :scope => 'email', :display => 'page'
end

В-третьих, убедитесь, что в качестве Canvas URL в настройках приложения Facebook установлено http://localhost:3000/ (https://developers.facebook.com/apps/).

).

После этого вы сможете просто перенаправить пользователей на http://localhost:3000/auth/facebook, чтобы отобразить для них диалоговое окно аутентификации.

...