Логін через Facebook, Google та Email в Rails (частина 1)

 

Велика кількість аплікацій потребує систему реєстрації та автентифікації користувачів. Це складне завдання. Так як йдеться про безпеку персональних даних. На щастя існує декілька хороших рішень для Rails фреймворку. Мабуть, найпоширенішим є Devise. Devise є досить простим у встановленні. Складність полягає у великій кількості можливих сценаріїв.

В залежності від потреб бізнесу можна організувати різні способи реєстрації. Якщо достаньо отримати пошту користувача, яка буде також виконувати роль логіну, і запитувати пару логін / пароль для входу, то стандартні налаштування Devise – це те що потрібно.

У цій статті ми розглянемо більш складний flow:

    1. Відвідувач має можливість обрати спосіб реєстрації: за допомогою аккаунтів facebook чи google, або через пошту.
    1. Після реєстрації через пошту користувач може під’єднати аккаунти соціальних мереж (facebook та/чи google)
    1. Після входу через один із аккаунтів соціальних мереж користувач отримує лист де має змогу перейти на сторінку встановлення паролю для входу.
    1. В подальшому користувач може від’єднати акаунти соціальних мереж та повністю видалити акаунт на сайті.

У статті ми крок за кроком пройдемо весь шлях реалізації даного завдання.

Посилання на репозиторій https://github.com/RubyForceTeam/authentication_solution_illia108.git

Створюємо нову rails аплікацію з базою даних PostgreSQL (у разі розгортання на heroku це полегшить роботу):

rails new auth --database=postgresql
cd auth

Додаємо необхідні бібліотеки:

Gemfile

gem 'devise'
gem 'omniauth-facebook'
gem 'omniauth-google-oauth2'
gem 'dotenv-rails', groups: [:development, :test]

Перші три gem’и потрібні безпосередньо для реєстрації та авторизації користувачів. Останній dotenv-rails – для збереження конфіденційної інформації. Ми повернемось до нього пізніше.

bundle

Створюємо базу даних:

rails db:create

Налаштовуємо Devise:

rails generate devise:install
rails generate devise User
rake db:migrate

В результаті отримуємо модель User, відповідну міграцію та шлях.

Devise потребує визначеної головної сторінки:

rails g controller home index

Згенерували новий контроллер із методом index. Та встановлюємо цей метод на root_path:

config/routes.rb

Rails.application.routes.draw do
  root to: 'home#index'
  devise_for :users
end

Для зручності додамо мінімальну навігацію:

app/views/layouts/application.html.erb

Auth
    <%= csrf_meta_tags %>

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  

  
    <%= link_to 'Home', root_path %>
    <%= link_to 'Users', users_path %>
    <% if current_user %>
      <%= link_to('Logout', destroy_user_session_path, method: :delete) %>
    <% else %>
      <%= link_to('Login', new_user_session_path) %>
    <% end %>
    <%= yield %>
  

Стартуємо сервер та перевіряємо результат:

rails s

Першу частину завершено. У нас є реєстрація користувачів за допомогою логіну та паролю.

Продовження дивіться за посиланням: http://rubyforce.io/rails-devise-part-2/

Автор: Ілля Кузьма

Leave a Reply

1 Comment on "Логін через Facebook, Google та Email в Rails (частина 1)"

Notify of
avatar
Sort by:   newest | oldest | most voted
trackback

[…] Продовження. Першу частину дивіться за посиланням: http://rubyforce.io/rails-devise-part-1/ […]

wpDiscuz