Identity

Аутентификация и авторизация для Rails приложения.

Установка

Добавьте строчку в Gemfile приложения:

gem 'anadea-identity'

и запустите в консоли:

$ bundle

Запустите генератор:

$ rails g identity:install User

если нужно распаковать локализации и представления:

$ rails g identity:locales
$ rails g identity:views

проверьте миграцию и запустите:

$ rake db:migrate

Использование

Аутентификация

Проверьте маршруты: rake routes. Вы увидите набор маршрутов, подобных тем, что даёт Devise. Собственно, Identity и есть не слишком толстая обёртка поверх Devise.

У вас работает логин (через форму email/пароль), регистрация (через форму email/пароль/подтверждение пароля), восстановление пароля и многое другое.

Админка

Чтобы получить админку по пользователям, подключите ActiveAdmin и сгенерируйте конфигурационный файл без генерации пользователей (--skip-users).

Конфигурация

Выполняется в config/initializers/identity.rb.

Вы всегда можете узнать полный список конфигурацинных опций и их значения по умолчанию, ознакомившись с исходным кодом. Важные опции:

  • config.user_class_name – имя класса, который будет использоваться, как основная модель для аутентификации. По умолчанию: User.

  • config.devise_modules – модули Devise, которые вы используете. Например, выключение registerable приведёт к невозможности зарегистрироваться, в том числе, исчезнет соответствующая ссылка, а включение confirmable приведёт к тому, что приложение станет требовать подтверждение адреса электронной почты, при условии, что в таблице identity_users есть соответствующие колонки (по умолчанию нет).

Вы можете как модифицировать этот массив, так и полностью его переопределить:

  config.devise_modules += [:confirmable]
  config.devise_modules = [:database_authenticatable, :omniauthable, ...]

По умолчанию включены модули database_authenticatable, registerable, recoverable, rememberable, trackable и validatable. Если включить хотя бы один omniauth provider, автоматически подключится omniauthable. За подробным их описанием обратитесь в документацию Devise.

  • config.layout – макет (layout), используемый формами логина, регистрации и прочего. По умолчанию используется главный макет вашего приложения – "application".

  • active_scope – скоуп, используемый системой для поиска пользователей. Вы можете посредством его блокировать некоторых пользователей. Например, :active. По умолчанию :all, то есть, все пользователи.

  • config.auth_routes – позволяет передать опции для роутов Devise, подключаемых приложением. Если указать false, маршруты подключены не будут и вы можете сами подключить их.

Вы также можете использовать любые конфигурационные опции самого Devise. Они будут переданы Devise в точности. Например:

config.parent_controller = "ApplicationController"

За подробным списком того, что можно сконфигурировать в Devise, обратитесь к его документации.

Сделанные кастомизации в конфигурации Devise.

Мы делаем небольшие изменения в конфигурации Devise по умолчанию. Вы можете это увидеть в исходном коде гема.

  • config.mailer_sender – мы достаём это из переменной окружения MAIL_FROM.
  • config.sign_out_via – GET и только GET. Это должно работать без джаваскрипта.

Логин через Facebook

Для того, чтобы включить в приложении логин через Facebook нужно:

  • подключить gem 'omniauth-facebook' в своем Gemfile.
  • указать config.omniauth :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'] в config/initializers/identity.rb.
  • создать приложение в Facebook можно с помощью инструкции.

Логин через Twitter

Для того, чтобы включить в приложении логин через Twitter нужно:

  • подключить gem 'omniauth-twitter' в своем Gemfile.
  • указать config.omniauth :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET'] в config/initializers/identity.rb.
  • создать приложение в Twitter можно здесь.

Логин через Google

Для того, чтобы включить в приложении логин через Google нужно:

  • подключить gem 'omniauth-google-oauth2' в своем Gemfile.
  • указать config.omniauth :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET'] в config/initializers/identity.rb.
  • создать приложение в Google можно здесь.
  • для создания приложения можно воспользоваться инструкцией
  • если после выполнения всех инструкций и проверки правильности 'Redirect URIs' и 'Client ID'/'Client secret', аутентификация не происходит и выдает ошибку 'Error: redirect_uri_mismatch', то нужно пересоздать Client ID. Есть какой-то внутренний баг гема.

Логин через Microsoft

Для того, чтобы включить в приложении логин через Microsoft нужно:

  • подключить gem 'omniauth-windowslive' в своем Gemfile.
  • указать config.omniauth :windowslive, ENV['MICROSOFT_KEY'], ENV['MICROSOFT_SECRET'], scope: 'wl.emails' в config/initializers/identity.rb.
  • создать приложение в Microsoft можно здесь.

Логин через Yahoo

Для того, чтобы включить в приложении логин через Yahoo нужно:

  • подключить gem 'omniauth-yahoo' в своем Gemfile.
  • указать config.omniauth :yahoo, ENV['YAHOO_KEY'], ENV['YAHOO_SECRET'] в config/initializers/identity.rb.
  • создать приложение в Yahoo можно здесь.