Ruby on Rails: Authlogic Integration Facebook: учетные записи ссылок с пользовательским вводом вместо автоматического использования адреса электронной почты
-
12-10-2019 - |
Вопрос
Я разрабатываю веб -приложение в Ruby On Rails. Я использую Authlogic для аутентификации. У моего сайта есть свои собственные логины, но я надеюсь также использовать Facebook. Я попробовал authlogic_facebook_connect (с помощью Facebooker). После множества икот (документы действительно не были полностью поддержаны), я получил authlogic_facebook_connect для работы, и все в порядке. Поведение «подключения» по умолчанию отлично работает, когда я сталкиваюсь с пользователями, которые никогда не использовали сайт раньше, но это приводит к множеству дублирующих входа для людей, которые используют разные адреса электронной почты для Facebook и для моего сайта. Вот что я хочу:
Когда пользователь нажимает кнопку «Подключить» Facebook (и после того, как он пройдет через шаг автозаправления Facebook, нажав «Alling»), я хочу, чтобы я всплыл в поле, спрашивая пользователя, хотят ли они подключиться к ранее существовавшей учетной записи на моей сайт или если они хотят, чтобы учетная запись сгенерировала для них.
Если они хотят, чтобы это автоматически сгенерировано для них, мы в порядке, и мы продолжаем как обычно, но если - с другой стороны - они хотят связать свою учетную запись Facebook с учетной записью на моем сайте, я действительно хочу, чтобы они входили их местные полномочия и найдите правильную учетную запись. Другими словами, я не надо Хочу, чтобы мое решение автоматически выяснилось, какая учетная запись выглядит правильной, я хочу, чтобы пользователь сделал это.
Есть ли какой -нибудь GEM / плагин / быстрый взлом, который позволит мне осуществить это с помощью authlogic_facebook_connect или oauth или что -то еще?
--Дэйвид
Решение
Кто -то другой может указать вам на идеальную жемчужину на это, но я могу сказать вам, что я работал над аналогичной проблемой, и это было не так много работы, чтобы бросить нашу собственную, основываясь на драгоценный камень OAuth2.
Вот набросок кода/потока, который я использую.
1) Пользователь нажимает «Подключиться к Facebook», и это отправляет вас в такое действие
def to_facebook
options = {
:redirect_uri => facebook_callback_url,
:scope => "email,publish_stream" # whatever you want to do
}
client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_API_SECRET, :site => FACEBOOK_API_SITE)
redirect_to client.web_server.authorize_url(options)
end
2) Пользователь переходит на Facebook и дает вам весь доступ, который вы хотите, затем Facebook вызывает обратный вызов, который вы указали facebook_callback_url
что должно привести вас к такому действию:
def facebook_callback
client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_API_SECRET, :site => FACEBOOK_API_SITE)
access_token = client.web_server.get_access_token(params[:code], :redirect_uri => facebook_callback_url)
do_my_custom_user_association(access_token)
end
Тогда вы можете указать все, что захотите do_my_custom_user_association
, у вас должен быть current_user
Доступно от Authlogic, если кто -то вошел в систему, так что вы можете перенаправить по потоку, который позволяет регистрируемому пользователю выбирать, если он хочет объединиться в свою текущую учетную запись или другую. Если нет текущего пользователя, вы можете отправить его в поток учетной записи Create, прилагаются некоторые данные Facebook.
Обратите внимание, что это всего лишь эскиз, есть случаи ошибок для обработки (например, Facebook_callback будет нанесен параметрам error_reason
Если get_acccess_token
терпит неудачу), и я не рекомендую вам делать все взаимодействие OAuth2 прямо в вашем контроллере, но основная идея есть.
Видеть http://developers.facebook.com/docs/authentication/ Если какое -либо из взаимодействия OAuth2 не имеет смысла.