Как использовать и настраивать omniauth со стратегиями Yahoo, Google, Facebook в различных средах? - PullRequest
4 голосов
/ 24 марта 2012

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

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

  1. Для каждого из этих провайдеров (Yahoo, Google, Twitter, Facebook), какие шаги необходимо настроитькаждый по отдельности для omniauth, чтобы их можно было использовать в средах разработки, тестирования и производства?

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

Спасибо - wg

Ответы [ 2 ]

6 голосов
/ 24 марта 2012

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

Вам необходимо создать приложения для 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

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

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

Редактировать: Чтобы ответить на ваш вопрос:

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

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

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

0 голосов
/ 24 марта 2012

В настоящее время я помещаю специфические для среды вещи в config / initializer / 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

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

...