Как использовать и настраивать omniauth с помощью стратегий yahoo, google, facebook в различных средах?


Я работаю над приложением Rails 3.2, которое позволит пользователям проходить аутентификацию у нескольких поставщиков ... Yahoo, Google, Facebook и / или Twitter. Мы используем omniauth, и хотя я понимаю основной рабочий процесс, я не могу найти инклюзивный документ, в котором говорится, как каждый из этих конкретных поставщиков должен быть настроен, ни как приложение Rails должно быть настроено, чтобы я мог должным образом протестировать/использовать эти стратегии в среде разработки, тестирования и производства.

Итак, мой вопросы:

  1. Для каждого из этих поставщиков (yahoo, google, twitter, facebook), какие шаги необходимы, чтобы настроить каждый из них индивидуально для omniauth, так что они могут быть использованы в разработке, тестировании и производственных средах?

  2. Каков наилучший / рекомендуемый способ настроить приложение Rails для правильного использования каждого из этих поставщиков для любой среды, в которой я работаю?

Спасибо-wg

2 4

2 ответа:

Что касается вашего первого вопроса:

Вам нужно создать приложения для Facebook, Google и Twitter, чтобы разрешить использование их протокола OAuth. Что касается Yahoo, я не знаю. Является ли Yahoo по-прежнему актуальной? Просто шучу. Для получения списка всех доступных стратегий поставщика Omniauth перейдите сюда.

Итак, Facebook:

https://developers.facebook.com/apps
Create app. You'll be given an API Key and an API Secret.
Settings > Basic > Website > Site URL:
  your_website_callback_url for production

Twitter:

https://apps.twitter.com/
Create app. You'll be given an API Key and an API Secret.
Settings > Callback URL:
  your_website_callback_url for production

Google:

https://console.developers.google.com
Create app. You'll be given an API Key and an API Secret.
Services > Select necessary services and scopes
APIs & auth > Credentials > Create New Client ID:
  http://localhost:3000/ for development/testing
  your_website_callback_url for production

Затем, ваш Gemfile:

gem 'omniauth-facebook'
gem 'omniauth-twitter'
gem 'omniauth-google-oauth2'

Создайте файл для настройки ваших стратегий. Конвенция дает ему имя omniauth.rb. Есть куча различных вариантов, доступных для каждого поставщика, вы должны будете исследовать, что это такое:

# config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, 'FACEBOOK_KEY', 'FACEBOOK_SECRET', {
    secure_image_url: 'true',
    image_size: 'square'
  }

  provider :twitter, 'TWITTER_KEY', 'TWITTER_SECRET', {
    secure_image_url: 'true',
    image_size: 'normal'
  }

  provider :google_oauth2, 'GOOGLE_KEY', 'GOOGLE_SECRET', {
    image_size: 50,
    image_aspect_ratio: 'square'
  }
end

А затем следуют эта железнодорожная передача и эта Вики. Вы должны использовать переменные окружения, такие как ENV['FACEBOOK_KEY'], и устанавливать их в консоли, чтобы вы могли изменять их во время выполнения и чтобы они не были помещены в определенный файл в вашем репозитории (особенно если у вас есть открытый файл). вот решение для этого проблема.

И наконец, вы должны искать дополнительную информацию в вики gem каждого поставщика. Например, в facebook omniauth камень ридми пример хэш-код проверки подлинности возвращается на Facebook, когда пользователь выполняет проверку подлинности с помощью Facebook. Затем вы можете использовать эту информацию для настройки модели пользователя (обновить его полное имя или образ в соответствии с тем, что вы хотите сделать). В нем также упоминается, как вы можете запросить дополнительные разрешения для доступа к пользовательским данным, которые не являются общедоступными доступный.

Правка: чтобы ответить на ваш вопрос:

Как я уже сказал, мне очень нравятся железнодорожные передачи, и я следил за 2 эпизодами, где Devise и OmniAuth были объединены. В этих эпизодах драгоценный камень omniauth-openid используется для аутентификации в Google. Недостатком этого является то, что, поскольку вы не регистрируете приложение, вы не можете настроить запрос Аутентификации. С помощью Facebook и Twitter вы можете выбрать имя, ввести описание и загрузить логотип вашего приложения. Вы также можете установить ссылки на Страницы" конфиденциальность "и" Условия использования " на вашем веб-сайте. Все эти мелкие детали появятся перед пользователем, когда он попытается войти в систему с помощью этих сервисов, и, как вы можете себе представить, они повлияют на ваши показатели конверсии пользователей.

С помощью omniauth-openid Вы не можете настроить приглашение, и информация, которую вы получаете, ограничена (только электронная почта и имя, связанное с учетной записью). Если это все, что вам нужно, тогда все готово. Однако если вы хотите получить изображение пользователя, возможно, получите доступ только к другой личной информации доступно из профиля пользователя Google+, то, вероятно, лучше просто пойти с omniauth-google2 .

Хорошая вещь в OmniAuth заключается в том, что как только вы получаете базовый фундамент, добавление других поставщиков так же просто, как регистрация приложения, получение ключа API и секрета и включение определенного драгоценного камня. Я бы предложил начать сначала с Facebook, так как это самый популярный сервис и, как таковой, с наибольшим количеством документации (или, по крайней мере, с большим количеством вопросов здесь на так). Затем создайте приложение и добавьте другие методы проверки подлинности.

В настоящее время я помещаю материал, специфичный для среды, в config/initializers/devise.rb. Например Facebook:

  # Facebook strategy
  require "omniauth-facebook"

    case Rails.env
    when "development"
      config.omniauth :facebook, 'xxx', 'xxx', {:scope => 'manage_pages,publish_stream,offline_access,email'}
    when "production"
      config.omniauth :facebook, 'xxx', 'xxx', {:scope => 'manage_pages,publish_stream,offline_access,email'}
    end

Надеюсь, это вам поможет.