Приложение Rails 3: для входа только через oAuth через Facebook и Twitter, следует ли мне использовать Devise / OmniAuth или только OmniAuth? - PullRequest
2 голосов
/ 25 марта 2011

Я создаю новое приложение Rails 3 и хочу, чтобы пользователи могли входить в систему, используя свои учетные данные Facebook или Twitter.

Я не знаю, должен ли я реализовать это, используя Devise и OmniAuth, или только OmniAuth. Я только что посмотрел скринкаст Райана Бэйта на Simple OmniAuth и кажется, что я мог бы просто использовать OmniAuth, но я не уверен, что этого достаточно.

У меня есть следующие требования:

  1. Разрешить вход через Facebook и / или Twitter. Я не буду внедрять локальные учетные записи пользователей / пароли.

  2. При первом входе в систему через FB / Twitter необходимо создать нового пользователя в БД, чтобы я мог хранить связанные токены FB / Twitter oAuth.

  3. Пользователи должны иметь возможность связать действия FB и Twitter с их профилем / пользователем, чтобы они могли публиковать сообщения как в FB, так и в Twitter.

  4. Пользователи должны иметь возможность удалить свою учетную запись.

Ответы [ 3 ]

4 голосов
/ 25 марта 2011

Я разместил это в Списке рассылки Devise Google и получил ответ от Хосе Валима (сопровождающего Devise и члена основной группы Rails):

«Вы можете использовать только OmniAuth. Если вы используете Devise, единственным преимуществом будет то, что он добавит помощников Omniauth url, но это настолько мало, что, честно говоря, не стоит накладных расходов».
- Хосе Валим

1 голос
/ 25 марта 2011

Devise - это удобный способ автоматически обрабатывать все, что связано с учетными записями пользователей. Если вам не нужны все навороты, вам определенно стоит пойти по простому пути OmniAuth, как в скриншоте.

Единственная проблема, с которой я сталкиваюсь при попытке связать учетную запись Facebook и Twitter, - это то, что вам нужно будет подписать их в одну, чтобы связать другую - и если они действительно войдут в систему по отдельности В некоторых случаях в вашей базе данных может быть два пользователя. Это не будет проблемой, если вы работаете с Google и Facebook, потому что они оба отправляют обратно адрес электронной почты, но Twitter отправляет только имя пользователя, а не адрес электронной почты.

Вам потребуется добавить в модель пользователя поле для имени пользователя (Twitter) и адреса электронной почты (Facebook), чтобы можно было попытаться связать учетные записи, если посетитель сделал это отдельно и хочет связать их позже. Просто будьте осторожны с этим при настройке.

0 голосов
/ 20 апреля 2012

Если вы не можете использовать только OmniAuth, возможно, потому что, как и в моем случае, вы хотите использовать ActiveAdmin, который зависит от Devise, и методы, подобные current_user, будут конфликтовать, вы можете просто переопределить страницу входа с помощью своего собственного:

match '/users/sign_in', :to => "sessions#new"
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }

У меня есть ссылка «Войти через Facebook» в моей навигации, но эта страница необходима для перенаправления пользователей, когда они пытаются получить доступ к защищенной странице, когда не вошли в систему.

Редактировать : На самом деле, на вики-странице есть раздел : "Использование OmniAuth без других аутентификаций"

...