Додаємо реєстрацію та аутентифікацію користувачів за допомогою Devise

Created by Piotr Steininger, @polishprince

Updated by Ernesto Jimenez, @ernesto_jimenez

Переклад українською - Bogdan Varshchuk, @g3d

Редагування та оновлення - Aleksandra Klochko, @aleksacastle

Цей крок передбачає, що у вас вже створений додаток Ideas.

1.Додання devise gem

Відкриємо Gemfile та додамо ці рядки

gem 'devise'

у консолі запустимо

bundle install

щоб встановити gem. Не забудь перезапустити Rails сервер.

2.Встановлення Devise

Запустимо в терміналі:

rails g devise:install

3.Налаштування Devise

Перевіримо, чи у нас описані url опції за замовчуванням. Відкриємо config/environments/development.rb та додамо:

   config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

перед словом end.

Відкриємо app/views/layouts/application.html.erb та додамо:

<% if notice %>
  <p class="alert alert-success"><%= notice %></p>
<% end %>
<% if alert %>
  <p class="alert alert-danger"><%= alert %></p>
<% end %>

над рядками

   <%= yield %>

Відкриємо app/views/ideas/show.html.erb і видалимо рядок:

<p id="notice"><%= notice %></p>

робимо те саме у файлі app/views/comments/show.html.erb.

4.Створення моделi користувача

Використаємо команду Device gem для створення моделi користувача.

   rails g devise user
   rails db:migrate

Ментор: Поясни що було згенеровано. Що таке поля?

5.Створення першого користувача

Коли в нас все встановлено, ми можемо створити першого користувача. Devise автоматично створює всі маршрути, щоб створити новий аккаунт, увійти чи вийти з додатку.

Переконаємося, що rails сервер увімкнений, відкрий http://localhost:3000/users/sign_up та створи новий профайл користувача.

6.Додання посилання для авторизації та реєстрації

Все, що нам залишилось зробити, це додати відповідні посилання або повідомлення у верхньому правому кутку про те, що користувач увійшов в свій профайл.

В файл app/views/layouts/application.html.erb додаємо:

<p class="navbar-text pull-right">
<% if user_signed_in? %>
  Logged in as <strong><%= current_user.email %></strong>.
  <%= link_to 'Edit profile', edit_user_registration_path, :class => 'navbar-link' %> |
  <%= link_to "Logout", destroy_user_session_path, method: :delete, :class => 'navbar-link'  %>
<% else %>
  <%= link_to "Sign up", new_user_registration_path, :class => 'navbar-link'  %> |
  <%= link_to "Login", new_user_session_path, :class => 'navbar-link'  %>
<% end %>
</p>

над рядками

<ul class="nav">
  <li class="active"><a href="/ideas">Ideas</a></li>
</ul>

Також потрібно, щоб користувач переходив на сторінку авторизації автоматично, якщо він ще не увійшов у свій профайл. Для цього відкриваємо app/controllers/application_controller.rb та додаємо:

  before_action :authenticate_user!

після protect_from_forgery with: :exception.

Відкрий браузер та спробуй увійти та вийти з профайлу.

Ментор: Розкажіть про user_signed_in? та current_user. Чим вони корисні?

Що далі?