Ruby on Rails: Authlogic Integration Facebook: учетные записи ссылок с пользовательским вводом вместо автоматического использования адреса электронной почты

StackOverflow https://stackoverflow.com/questions/4512277

Вопрос

Я разрабатываю веб -приложение в 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 не имеет смысла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top