Facebook авторизация для приложения Rails с использованием Clearance? - PullRequest
3 голосов
/ 06 октября 2011

Я пишу приложение Rails 3.1, используя Clearance для аутентификации.Я хочу добавить стандартную авторизацию Facebook: разрешить пользователям продолжать регистрироваться / аутентифицироваться у нас напрямую (с использованием разрешения) или через FB;если они входят / регистрируются через FB, и у нас уже есть учетная запись для связанного адреса электронной почты, объедините учетные записи.

Существует хорошая документация для использования OmniAuth / Devise, но я не нашел ничего подобного дляЗазор.Есть ли (активно поддерживаемые) жемчужины, чтобы помочь здесь, или даже просто учебники?Лучше всего я обнаружил BlueLightSpecial, но ни он, ни гем, который он использует для FB Connect, похоже, больше не поддерживаются.

Ответы [ 2 ]

6 голосов
/ 15 апреля 2012

Я закончил кодировать это решение - опубликовать его здесь, если оно может помочь другим (или если у других есть предложения по его улучшению).

Вот некоторая логика:

Приложение изначально было построено с Clearance для аутентификации / авторизации, поэтому использование Clearance позволяет продолжать работу существующим именам / pwds и существующему коду авторизации.

Идентификация пользователя Распродажа использует адрес электронной почты в качестве основного идентификатора.Приложению необходимо, чтобы у каждого пользователя был адрес электронной почты для других целей, поэтому мы продолжим использовать электронную почту в качестве основного идентификатора пользователя.Мы получаем его из FB, когда пользователь регистрируется, если он регистрируется через FB.(обратите внимание, что omniauth-facebook запрашивает настраиваемый набор разрешений FB; доступ к адресу электронной почты включен по умолчанию).

Регистрация пользователя У новых пользователей есть выбор: создать комбо e-mail / pwd или зарегистрироваться через FB.Omniauth-facebook используется для аутентификации на FB (и для расширения со временем на другие системы аутентификации).Мы получаем пользовательские данные (имя, адрес электронной почты и т. Д.) От FB, а также токен авторизации Facebook.Пользователи, прошедшие аутентификацию таким образом, не должны указывать парольПользователи, желающие зарегистрироваться без FB, предоставляют адрес электронной почты, пароль и другие данные пользователя.Пользователи, созданные при входе в FB, переходят к пользователю / редактору, чтобы закончить предоставлять любые данные профиля, которые мы не можем получить от FB.Мы также сохраняем существующий механизм регистрации пользователей, позволяющий пользователю вручную указывать адрес электронной почты / pwd / другие данные.

Проверка пользователя Распродажа проверяет адрес электронной почты пользователя.Наш переопределенный парольФункция по существу обходит проверку пароля.Для производственного использования это решение должно включать в себя валидацию пользователей для реализации «у вас должен быть хотя бы один из действительных сертификатов pwd или omniauth» *

Создание сеанса Используется модель сеанса Clearance (хранение маркера запомнить в cookie).

Контроллер сеанса переопределен, чтобы добавить метод для подписи через FB.Обратный вызов из FB направляет к этому методу, который создает / обновляет данные авторизации пользователя и вызывает sign_in разрешения пользователя (user)

Авторизация Простая модель клиренса сохраняется: фильтр 'authorize', по сути, просто проверяет, вошел ли действительный пользователь, и предоставляется помощник current_user.

Использование FB Токен FB пользователя сохраняется после аутентификации FB (в объекте аутентификации, который принадлежит пользователю).Коала используется для других запросов FB (например, для публикации на стене пользователя) ... подробности здесь опущены;Я не делаю ничего особенного.

Обновление токена FB Токены FB периодически истекают (а роль FB «автономный доступ» устарела).Токен обновляется, когда пользователи входят в систему, но токен может стать недействительным до истечения сеанса приложения (когда пользователь выходит из FB, меняет свой пароль FB или истекает срок действия токена).Я работаю над тем, как периодически обновлять токен FB вне потока входа в систему, но этот ответ выходит за рамки этого ответа.

0 голосов
/ 16 февраля 2012

Преимуществом Devise / OmniAuth является его бесшовная интеграция с другими API (Twitter, Facebook и т. Д.).

Вы можете попробовать использовать существующие драгоценные камни, чтобы создать собственную интеграцию с Clearance. Например: https://github.com/nsanta/fbgraph (хотя этот драгоценный камень давно не обслуживался). По-прежнему работает хорошо.

Есть также Коала https://github.com/arsduo/koala - работает с аутентификацией OAuth и Facebook Graph API.

...