Аутентификация с использованием Facebook через Rails API

Пользователи моего приложения Rails могут пройти аутентификацию одним из следующих двух способов:

  • Используя свою учетную запись Facebook
  • Использование собственной аутентификации

Я использую Facebook SDK на Android и devise и omniauth на Rails.

Как мне пройти аутентификацию в моем приложении Rails на Android, чтобы затем получить необходимую мне информацию с сервера?

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


person F. P.    schedule 25.05.2012    source источник


Ответы (4)


Это можно сделать с помощью гема fb_graph (не fbgraph!).

Вы можете просто добавить его в свой gemfile и сделать

user = FbGraph::User.me(token).fetch

где token — токен oauth, который вы получили, например, с помощью Facebook SDK на Android. user.email будет адресом электронной почты пользователя (если вы настроите необходимые разрешения).

Вы можете использовать этот URL для тестирования:

https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token
person F. P.    schedule 05.12.2012
comment
Просто обратите внимание, что этот ответ привлек внимание. Имейте в виду, что это было 2,5 года назад, и с тех пор многое могло измениться. Будьте осторожны с тем, что вы берете из этого! - person F. P.; 01.05.2015

Это полностью зависит от того, как работает ваша система аутентификации. Вам нужно будет создать API на своем сервере для обработки связи из приложения Android и передачи информации между ними с помощью API.

person Niraj Shah    schedule 25.05.2012
comment
Я использую devise и omniauth, примерно так это и работает. Для Android я использую Facebook SDK. - person F. P.; 25.05.2012
comment
Facebook SDK будет выполнять аутентификацию только с Facebook. Вам нужно будет создать библиотеку Android, которая будет аутентифицироваться на вашем веб-сайте Rails. Это единственный способ безопасно получить информацию с вашего сервера. - person Niraj Shah; 25.05.2012
comment
Мой сервер авторизуется в facebook через Omniauth. Мне было интересно, могу ли я использовать Facebook SDK для входа пользователя в систему, а затем сделать GET для users/auth/facebook, чтобы пользователь также мог быть авторизован на моем сервере. (это сбивает с толку? Я перепишу это, если не смогу объяснить сам) - person F. P.; 25.05.2012

Нирадж Шах совершенно прав, хотя ответ может быть недостаточно подробным для вас. Подробный ответ на ваш вопрос см. в статье Защита рельсовой трансляции API, автор Райан Бейтс. который был выпущен совсем недавно. Он охватывает базовую аутентификацию HTTP.

Вы также можете взглянуть на более продвинутый вариант защиты вашего API/предоставления зарегистрированным пользователям доступа к своим данным. Об этом также есть рельсовая трансляция: http://railscasts.com/episodes/353-oauth-with-doorkeeper — хотя это профессиональный выпуск, поэтому вам нужно подписаться на него, чтобы посмотреть его.

person emrass    schedule 25.05.2012
comment
Спасибо за ссылки. Однако я использую devise, а не встроенную аутентификацию HTTP. - person F. P.; 25.05.2012
comment
Аутентификация API отделена от аутентификации пользователей! Теоретически вы можете отправлять имя пользователя/пароль (или провайдер + uid — или что-то еще, что вы можете использовать для уникальной идентификации пользователя) с каждым запросом к API и аутентифицироваться по нему. Однако это просто плохой стиль (и если вы это делаете, обязательно используйте SSL!). Аутентификация с использованием токенов, таких как OAuth, — это правильный путь. - person emrass; 25.05.2012
comment
Хорошо, разработка поддерживает аутентификацию на основе токенов, попробуем переключиться на нее. Все еще не понимаю, как я должен аутентифицировать пользователя, который входит в систему с Facebook. - person F. P.; 25.05.2012

Франсиско, у меня точно такая же потребность.

Сценарий разработки с использованием token_authenticable кажется простым и не должен быть проблемой, но я не уверен, что это лучший способ справиться со сценарием Facebook. На веб-сайте для авторизации через FB я использую omniauth-facebook, как описано здесь: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview. Я думаю, что это использует OAuth с FB в качестве провайдера, поэтому вполне возможно, что последний RailsCast о привратнике, защищающем API с помощью OAuth, должен помочь. Я еще не пробовал, но сделаю это в ближайшее время, если вы меня не опередите. Вот ссылка: http://railscasts.com/episodes/353-oauth-with-doorkeeper.

person Gary Foster    schedule 25.05.2012
comment
Привет. Я скоро опубликую ответ на свой вопрос ради апостериорности. Что вам нужно сделать, так это использовать драгоценный камень fb_graph (не fbgraph!). Затем вы можете просто добавить его в свой gemfile и выполнить user = FbGraph::User.me(token).fetch, где token — это токен oauth, который вы получили, например, с помощью Facebook SDK на Android. user.email будет иметь адрес электронной почты пользователя (если вы настроите необходимые разрешения). Не стесняйтесь обращаться ко мне, если я не был ясен. - person F. P.; 26.05.2012
comment
В целях тестирования вы можете использовать irb и GET эту страницу: facebook.com/dialog/ В случае успеха вы будете перенаправлены на URI с токеном доступа. Затем вы можете использовать этот токен, как указано выше. - person F. P.; 26.05.2012