Can't load URL: The domain of this URL isn't included in the app's domains. To be able to load this URL, add all domains and sub-domains of your app to the App Domains field in your app settings.
Примеры сообщений об ошибках я публикую (в силу SEO соображений) на этой страничке, отметив их устрашающим красным бэкграундом.
Невозможно загрузить URL: домен этого URL не включен в домены приложения. Чтобы иметь возможность загрузить этот URL, добавьте все домены и субдомены вашего приложения в поле «Домены приложения» в настройках приложения.
Причем траблы, как мне показалось, вызваны, в основном, некорректной настройкой именно серверного, Facebook App, приложения, а не ошибками на стороне клиента; здесь все более-менее стандартно и хорошо документировано. For example, вы можете развернуть на Heroku такого рода свой собственный application (это rails-app), живую демку; любой заинтересовавшийся может авторизовать Facebook App в своем фейсбучном аккаунте, воочию увидев, как такое работает (вся процедура займет у вас несколько секунд).
URL blocked: This redirect failed because the redirect URI is not whitelisted in the app's client OAuth settings. Make sure that the client and web OAuth logins are on and add all your app domains as valid OAuth redirect URIs.
Естественно, данный туториал сердобольный автор предназначает, в первую очередь, вконец отчаявшимся авторам интернет-вопросов, вызванных не самой лучшей, в силу моей субъективной оценки, организацией веб-интерфейса соответствующего раздела FACEBOOK for Developers. Посему сходу заходим в этот самый злополучный раздел, и понеслось (все здесь значительно проще, чем кажется на первый взгляд):
URL заблокирован: Не удалось выполнить переадресацию, поскольку конечный URI не внесен в «белый» список в разделе приложения «Клиентские настройки OAuth». Убедитесь в том, что вход с помощью OAuth включен для клиента и веб-форм, а также добавьте все домены вашего приложения в качестве действительных URI для переадресации OAuth.
"Создать приложение" -> "Выберите тип приложения" -> "Потребительское" -> Далее -> "Отображаемое название" => Любое, какое хотите -> "Создание приложения" (понадобится ввести пароль). Далее Facebook перенаправит вас на страничку "Добавление продуктов в приложение", выбираем "Вход через Facebook" -> "Настроить" -> "Веб" -> "Укажите URL своего сайта" -> "URL сайта" => такой-то -> "Save".
Теперь открываем в левом сайдбаре "Настройки" -> "Основное", "Домены приложений" => домен вашего клиентского приложения, URL этого же домена без затей вписываем в "URL-адрес политики конфиденциальности", "Удаление данных пользователей", "URL-адрес Пользовательского соглашения". Жмем "Сохранить изменения", предварительно не забыв скопировать со странички "ID приложения" и "Секрет приложения" (вкупе с url_callback их понадобится указать в переменных окружения панели администрирования хостинга Heroku, например).
И последнее здесь. Снова в левом сайдбаре "Вход через Facebook" -> "Настройки", "Действительные URI перенаправления для OAuth" - пишем этот callback:
https://<YOUR_SUBDOMAIN>.herokuapp.com/users/auth/facebook/callback
Все, сохраняем и закрываем глючный раздел FACEBOOK for Developers, чтобы, по возможности, больше сюда не возвращаться (впечатление, будто бы в крайней спешке или вообще спецом нахерачено, в целях обломать как можно больше сдуру забредшего сюда народу; информационные сообщения то и дело предоставляют неверную информацию, русскоязычные доки почти ни о чем).
Теперь (очень кратко), что касается программного кода клиентского приложения. Целиком и полностью rails-app доступен в гитхабе, ReadMe описывает последовательность действий, позволяющих быстро и без проблем развернуть приложение на Heroku. Остановлюсь здесь лишь на двух моментах: контроллер -
omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.from_omniauth(request.env['omniauth.auth'])
if @user.persisted?
sign_in_and_redirect @user, event: :authentication
set_flash_message(:notice, :success, kind: 'Facebook') if is_navigational_format?
else
session['devise.facebook_data'] = request.env['omniauth.auth']
redirect_to new_user_registration_url
end
end
def failure
redirect_to root_path
end
end
и модель:
user.rb
class User < ApplicationRecord
devise :database_authenticatable,
:rememberable, :omniauthable, omniauth_providers: [:facebook]
def self.new_with_session(params, session)
super.tap do |user|
if data = session['devise.facebook_data'] && session['devise.facebook_data']['extra']['raw_info'] && user.email.blank?
user.email = data['email']
end
end
end
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.email = auth.info.email
user.password = Devise.friendly_token[0, 20]
user.name = auth.info.name
user.image = auth.info.image
end
end
end
Продолжение темы на форуме. И, пожалуй, это все. Марку привет, как увидитесь.