Как настроить аутентификацию пользователя с помощью Devise в приложении Rails 7

Автор выбрал Girls Who Code для получения пожертвования в рамках программы Write for Donations.

Введение

Gem Devise – это решение аутентификации для приложений на Ruby on Rails; оно помогает настроить готовую к использованию аутентификацию пользователей в ваших проектах, не прибегая к написанию всего с нуля. Devise предоставляет множество полезных функций, таких как управление пользовательскими сеансами и добавление поддержки сторонней аутентификации с помощью OAuth с использованием гема OmniAuth. Devise также поставляется с встроенными модулями для функций, таких как сброс забытых паролей, отслеживание количества входов в систему и временных меток, определение тайм-аутов, блокировка учетных записей и так далее.

Devise делает аутентификацию пользователя такой простой, как инициализация гема и создание модели User с необходимыми функциями. Если бы вы создавали аутентификацию пользователя с нуля, вам пришлось бы писать код и тесты для всех желаемых функций, а также обрабатывать все краевые случаи в управлении сеансами, хранении файлов cookie и обеспечении безопасности данных. Используя гем Devise, вы избегаете всего этого и можете сосредоточиться на создании своего приложения.

В этом учебнике вы создадите минимальное веб-приложение с помощью Rails и установите Devise, который позволит пользователям создавать учетные записи, входить и выходить из своих учетных записей.

Предварительные требования

Для завершения этого учебника вам понадобятся:

Шаг 1 — Создание нового приложения Rails

На этом этапе вы создадите новое приложение Rails и запустите его локально на своем компьютере. Вы будете использовать утилиту командной строки rails для инициализации проекта.

Выполните следующую команду из терминала:

  1. rails new blog

Команда rails new создаст новый проект Rails в директории blog, которая включает в себя ряд сгенерированных файлов и папок. Одним из них является Gemfile, который содержит зависимости проекта. Вы настроите Gemfile для использования Devise в Шаге 3 — Установка и настройка Devise.

Примечание: Если вы получите ошибку, говорящую о том, что Could not find gem, вы можете ее устранить, перейдя в директорию вашего проекта (cd blog) и запустив bundle install, который установит все гемы, перечисленные в вашем Gemfile.

Вы можете открыть эту директорию в своем любимом текстовом редакторе или перейти к ней, используя терминал:

  1. cd blog

Чтобы запустить приложение Rails, запустите сервер разработки с помощью команды rails server из директории проекта:

  1. bundle exec rails server

Эта команда запустит сервер разработки Rails. Откройте http://localhost:3000 в вашем браузере, чтобы получить доступ к приветственной странице Rails. Rails использует порт 3000 для запуска приложения, если вы не указали альтернативный номер порта.

**Примечание:* Добавление bundle exec к вашей команде выполнит ее в контексте текущего пакета. Это означает, что будут использованы только проектно-специфический Gemfile и определенные в нем версии гемов. Это полезно, если у вас установлены разные версии одних и тех же гемов глобально.

Теперь вы инициализировали новое приложение Rails, к которому вы добавите аутентификацию пользователя на следующем этапе. На следующем этапе вы замените стандартную домашнюю страницу, которую предоставляет Rails, на пользовательскую стартовую страницу, что упростит навигацию по образцовому приложению после добавления Devise. После создания новой стартовой страницы вы добавите ссылки для пользователя на регистрацию и вход в приложение.

Шаг 2 — Создание стартовой страницы

Теперь, когда у вас есть базовое приложение Rails, вы замените стандартную страницу, предоставляемую Rails, на вашу собственную стартовую страницу. Пользовательская стартовая страница упростит отображение пользователю ссылок для регистрации и входа на корневом URL-адресе приложения. Вы добавите ссылки на вход и регистрацию на следующих этапах.

Для создания вашей стартовой страницы вам нужно выполнить следующее:

  • Добавьте маршрут в файл config/routes.rb.
  • Создайте HomeController, который будет обрабатывать запросы к этому маршруту.
  • Создайте файл представления, который будет отображаться при обращении к маршруту.

Начните с добавления корневого пути в файл routes.rb, который был создан при создании проекта.

Используя nano или ваш текстовый редактор, откройте файл config/routes.rb, созданный ранее:

  1. nano config/routes.rb

Добавьте выделенную строку:

config/routes.rb
Rails.application.routes.draw do
  root to: "home#index" 
end

root to: определяет, какое действие контроллера будет обрабатывать запросы к корневому пути — в данном случае, маршрут будет http://localhost:3000, который является портом по умолчанию для приложений Rails. Запросы к этому маршруту будут обрабатываться действием index в контроллере home. Этот файл пока не существует, поэтому вы создадите файл app/controllers/home_controller.rb далее.

Сохраните и закройте файл config/routes.rb. Используя nano, нажмите CTRL+X для выхода, Y для сохранения и ENTER для подтверждения имени файла и закрытия файла.

Затем создайте файл app/controllers/home_controller.rb и добавьте следующие строки:

app/controllers/home_controller.rb
class HomeController < ApplicationController
  def index
    render
  end
end

Это базовый HomeController с методом index, который выполняет одно действие: отображает файл представления, связанный с действием контроллера.

В этом случае файл представления будет файлом app/views/home/index.html.erb. Вам нужно будет создать этот файл, а также каталог home внутри каталога app/views.

Сохраните и закройте файл контроллера home.

Затем создайте каталог home в каталоге app/views:

  1. mkdir app/views/home/

Каталог home будет содержать все представления для определенного контроллера Rails.

Затем создайте файл app/views/home/index.html.erb и добавьте следующие строки:

app/views/home/index.html.erb
<h1>Hello DigitalOcean!</h1>

app/views/home/index.html.erb – это файл представления, который будет отображаться при выполнении действия index контроллера Home. Это HTML-файл, в котором можно встраивать код Ruby. Когда вызывается маршрут, определенный для определенного действия контроллера, этот файл представления отображается в браузере пользователя.

Сохраните и закройте файл.

Чтобы увидеть изменения в корневом URL, откройте http://localhost:3000 в вашем браузере (или обновите страницу, если она уже открыта). Обновленная стартовая страница будет похожа на эту:

При необходимости вы можете дополнительно настроить эту страницу, но это все, что нужно для данного руководства.

Теперь, когда у вас есть простое приложение Rails с собственной стартовой страницей, вы добавите аутентификацию пользователей с помощью гема Devise.

Шаг 3 — Установка и настройка Devise

На этом этапе вы установите и настроите Devise в вашем приложении Rails, чтобы вы могли использовать методы и помощники, поставляемые с гемом. Вы будете использовать метод user_signed_in? для проверки информации о сеансе любого авторизованного пользователя, сохраненной в куки браузера. Вы также будете использовать помощник current_user, чтобы получить данные учетной записи, которая в настоящее время авторизована. Оба метода встроены в Devise, и вы можете использовать их непосредственно в своем приложении, не пиша дополнительный код. Вы можете узнать больше о этих вспомогательных методах на странице проекта Devise на GitHub.

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

Но прежде чем вносить изменения в ваш Gemfile, остановите сервер разработки, который вы запустили на предыдущем этапе, нажав CTRL+C в терминале, где он работает.

Затем откройте ваш Gemfile для редактирования. Чтобы добавить гем Devise, добавьте выделенную строку к концу файла, но вне групп development и test:

Gemfile

# ...

# Уменьшает время загрузки с помощью кэширования; требуется в config/boot.rb
gem "bootsnap", require: false

# Используйте варианты Active Storage [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
# gem "image_processing", "~> 1.2"

gem "devise" 

group :development, :test do
  # См. https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
  gem "debug", platforms: %i[ mri mingw x64_mingw ]
end

# ...

Сохраните и закройте файл.

Затем установите новый добавленный gem, выполнив команду bundle install в терминале. Из вашего проектного каталога (blog) выполните следующую команду:

  1. bundle install

Эта команда установит gem Devise в ваш проект, что позволит вам использовать команду devise с утилитой командной строки rails и настроить аутентификацию.

Для настройки Devise в вашем проекте выполните команду генератора:

  1. bundle exec rails g devise:install

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

Предыдущая команда сгенерирует несколько файлов, включая файл инициализации и файл локализации i18n для Devise. Файл инициализации, подробно объясненный ниже, используется для настройки Devise при первом запуске приложения. i18n означает интернационализация, которая является стандартом для помощи в запуске вашего приложения на разных языках.

На этом этапе в терминале также будут выведены некоторые инструкции, например, следующие:

Output
=============================================================================== Depending on your application's configuration some manual setup may be required: 1. Ensure you have defined default url options in your environments files. Here is an example of default_url_options appropriate for a development environment in config/environments/development.rb: config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } In production, :host should be set to the actual host of your application. * Required for all applications. * 2. Ensure you have defined root_url to *something* in your config/routes.rb. For example: root to: "home#index" * Not required for API-only Applications * 3. Ensure you have flash messages in app/views/layouts/application.html.erb. For example: <p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p> * Not required for API-only Applications * 4. You can copy Devise views (for customization) to your app by running: rails g devise:views * Not required * ===============================================================================

Хотя для этого руководства не требуется ручная настройка, вы позже добавите всплывающие сообщения для notice и alert на этом этапе.

Вы завершили установку Devise. Далее вам нужно настроить несколько вещей в файле инициализации Devise, который только что был сгенерирован.

Когда вы запускали команду devise:install, был создан файл config/initializers/devise.rb, который является файлом инициализации для Devise. Когда вы запускаете свое приложение Rails, Rails загружает все гемы и плагины, а затем загружает все файлы инициализации. Вы можете настроить конкретные параметры для разных частей вашего приложения из этих файлов инициализации. Все эти инициализаторы находятся в каталоге config/initializers/, и именно там создает свой файл инициализации Devise.

Откройте config/initializers/devise.rb для редактирования. В файле найдите блок Devise.setup и добавьте следующую выделенную строку (внутри блока Devise.setup могут быть и другие блоки кода, но их можно игнорировать):

config/initializers/devise.rb
Devise.setup do |config|
  # ...

  config.navigational_formats = ['*/*', :html, :turbo_stream]

  # ...
end

Эта строка добавляет turbo_stream в качестве навигационного формата. Turbo Streams являются частью Turbo, который позволяет отправлять серверный HTML и рендерить страницы без использования много JavaScript. Вам нужно добавить это для работы Devise 4.8.1 с Rails 7; в противном случае вы получите ошибку undefined method user_url.

Сохраните и закройте файл.

Затем вы также добавите уведомления и предупреждения, которые были выделены в предыдущих инструкциях. Теги alert и notice – это места, где будут отображаться сообщения типа “Неверный пароль” и подобные в пользовательском интерфейсе. Вы всегда можете реализовать свои собственные сообщения об ошибках в вашем приложении (например, если вы используете перехватчики Axios с React в качестве фронтенда), но для этого учебного пособия вы завершите минимальную настройку Devise.

Откройте app/views/layouts/application.html.erb для редактирования. Добавьте теги для сообщений "notice" и "alert" внутри тега body, прямо над <%= yield %>:

app/views/layouts/application.html.erb
...
<body>
  <p class="notice"><%= notice %></p> 
  <p class="alert"><%= alert %></p> 
  <%= yield %>
</body>

Когда представление рендерится в браузере, блок <%= yield %> будет заменен содержимым из ваших файлов представлений. В вашем файле представления у вас был только тег p. Этот тег yield будет заменен этим содержимым.

Сохраните и закройте файл.

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

Шаг 4 – Создание модели пользователя с помощью Devise

Теперь вы готовы сгенерировать модель пользователя с помощью Devise, которая создаст необходимый файл модели и сгенерирует миграцию, которую вы можете запустить для создания таблицы users в вашем приложении. Когда кто-то регистрируется, вам нужно создать новую запись в таблице users в базе данных. С помощью модели пользователя вы можете управлять этими записями базы данных из представления вашего фронтенда.

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

Поскольку Rails – это фреймворк модель-представление-контроллер, каждая таблица базы данных имеет связанный с ней класс, который может быть использован для работы с данными в таблице. В данном случае, если вы создаете таблицу users, вы можете использовать модель User для выполнения операций, таких как User.first или User.find_by_email("[email protected]"). Вы можете создать эту модель, создав обычный класс, унаследованный от ApplicationRecord в Rails, но генерация модели пользователя с помощью Devise предоставляет вам множество методов, которые можно использовать для аутентификации.

Чтобы создать своего пользователя Devise, выполните следующую команду генератора:

  1. bundle exec rails g devise user

Следующий вывод будет отображен на экране:

Output
invoke active_record create db/migrate/20220908152949_devise_create_users.rb create app/models/user.rb invoke test_unit create test/models/user_test.rb create test/fixtures/users.yml insert app/models/user.rb route devise_for :users

Вывод показывает, что Devise создал несколько файлов, создал тесты и добавил маршруты. Первый файл, db/migrate/20220908152949_devise_create_users.rb, представляет собой файл миграции для создания таблицы users в вашей базе данных. Файл миграции Rails описывает изменения, которые необходимо внести в базу данных. Имя каждой миграции будет содержать временную метку, чтобы Rails знал, в каком порядке делать эти изменения.

Devise также создал файл модели пользователя (app/models/user.rb), вместе с тестами для него. Последняя строка вывода указывает, что был добавлен маршрут в существующий файл config/routes.rb. Devise автоматически добавляет все маршруты, такие как /users/sign_up и /users/sign_out, используя вспомогательный метод devise_for :users.

Прежде чем вы выполните файл миграции и создадите таблицу users в базе данных, давайте рассмотрим эти созданные файлы. Это поможет вам понять конфигурацию, которую создал Devise, чтобы вы знали, что происходит при выполнении миграции.

Начнем с открытия файла миграции (db/migrate/20220908152949_devise_create_users.rb), чтобы рассмотреть код по умолчанию:

db/migrate/20220908152949_devise_create_users.rb
# frozen_string_literal: true

class DeviseCreateUsers < ActiveRecord::Migration[7.0]
  def change
    create_table :users do |t|
      ## Аутентификация в базе данных
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      ## Восстановление
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Запоминание
      t.datetime :remember_created_at

      ## Отслеживаемость
      # t.integer  :sign_in_count, default: 0, null: false
      # t.datetime :current_sign_in_at
      # t.datetime :last_sign_in_at
      # t.string   :current_sign_in_ip
      # t.string   :last_sign_in_ip

      ## Подтверждение
      # t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Только при использовании повторного подтверждения

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

Поскольку вам не нужно вносить изменения, закройте файл миграции.

Devise также создал файл модели User. Он будет доступен в директории app/models/.

Откройте файл модели app/models/user.rb, чтобы ознакомиться с кодом по умолчанию:

blog/app/models/user.rb
class User < ApplicationRecord
# Включение модулей по умолчанию. Другие доступные модули:
# :confirmable, :lockable, :timeoutable, :trackable и :omniauthable
devise :database_authenticatable, :registerable,
       :recoverable, :rememberable, :validatable
end

A few options are added by Devise to configure how the user model works. The basic modules (database_authenticatable, registerable, recoverable, rememberable, and validatable) are already included. There are some additional options commented out, corresponding to the extra features you saw in the migration file. You can add these modules to the model file and configure the migration, depending on how much functionality you need in your application.

Вот что делают базовые модули:

  • database_authenticatable: Пользователи могут аутентифицироваться с помощью поля логина и пароля. Их зашифрованный пароль будет храниться в вашей базе данных.
  • registerable: Пользователи могут зарегистрироваться и редактировать или удалять свои аккаунты.
  • recoverable: Пользователи могут сбросить свой пароль и восстановить свои аккаунты, если забудут свои данные для входа.
  • rememberable: Этот модуль запоминает сеансы пользователя, сохраняя информацию в файле cookie браузера.
  • validatable: Этот модуль предоставляет проверки для полей электронной почты и пароля пользователя. (Например, ваше приложение требует, чтобы пароль содержал не менее шести символов, хотя вы не определили никаких пользовательских проверок в модели.)

Эти базовые модули включены в только что созданную модель User. Полный список модулей, входящих в Devise, можно найти в репозитории GitHub Devise: Devise GitHub repository.

Вам не нужно вносить никаких изменений, поэтому закройте файл модели User.

Другое обновление заключается в том, что файл config/routes.rb был изменен для добавления строки devise_for для пользователей:

Rails.application.routes.draw do
  devise_for :users

  root "home#index"
end

Этот полезный метод определяет все необходимые маршруты, связанные с аутентификацией пользователя, такие как /users/sign_in, /users/sign_out и /users/password/new. Devise берет на себя всю эту работу за вас и даже поддерживает чистоту файла маршрутов. Если вы хотите понять, как добавление devise_for :users автоматически преобразуется во все эти маршруты, вы можете посмотреть исходный код метода в репозитории GitHub Devise.

Здесь вам не нужно вносить никаких изменений, поэтому закройте файл config/routes.rb.

Чтобы узнать, какие маршруты определены в вашем приложении, вы можете перечислить их, запустив следующую команду:

  1. bundle exec rails routes

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

Вывод будет длинным, но вот фрагмент, показывающий некоторые из маршрутов:

Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
user_password PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
POST /users/password(.:format) devise/passwords#create
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel

Перечисленные маршруты в выводе – это маршруты, добавленные Devise, когда вы включили строку devise_for :users в ваш файл маршрутов. Это маршруты для действий, таких как вход, регистрация, сброс пароля и так далее.

Теперь, когда вы ознакомились с файлами и конфигурацией, сгенерированными Devise, вы можете запустить миграцию, которую вы создали в начале этого шага, выполнив следующую команду:

  1. bundle exec rails db:migrate

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

На экране будет выведен результат вроде следующего:

Output
== 20220908152949 DeviseCreateUsers: migrating ================================ -- create_table(:users) -> 0.0040s -- add_index(:users, :email, {:unique=>true}) -> 0.0012s -- add_index(:users, :reset_password_token, {:unique=>true}) -> 0.0011s == 20220908152949 DeviseCreateUsers: migrated (0.0074s) =======================

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

В этот момент перезапустите ваш сервер Rails:

  1. bundle exec rails server

Файл инициализации, упомянутый ранее, загружается только при загрузке Rails. Вам нужно перезапустить сервер, чтобы Rails мог загрузить новый файл инициализации Devise и настроить все для работы аутентификации пользователя.

Перейдите по адресу http://localhost:3000/users/sign_up в вашем браузере, где вы найдете форму регистрации, чтобы создать учетную запись, введя адрес электронной почты и пароль. (На следующем шаге вы добавите кнопки для регистрации и входа на главную страницу, чтобы читателю было удобнее перейти по этому URL.)

Чтобы протестировать аутентификацию, введите тестовый адрес электронной почты, например, [email protected], и пароль.

Как только вы зарегистрируетесь, вы будете перенаправлены на главную страницу, на которой отображается Привет, DigitalOcean!, а также сообщение о том, что вы успешно зарегистрировались, вот так:

Это уведомление об успешной регистрации отображается в теге <p class="notice"><%= notice %></p>, который вы добавили в файл application.html.erb.

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

Теперь, когда вы подтвердили, что процесс регистрации работает как ожидалось, ваш следующий шаг – добавить эту аутентификацию на страницу входа, которую вы создали на Шаге 2. На следующем шаге вы свяжете страницу регистрации с главной страницей, чтобы пользователи не должны были переходить по конкретному URL для регистрации, как вам пришлось сделать здесь.

Шаг 5 — Связывание аутентификации с главной страницей

У вас уже настроена вся функциональность в вашем проекте, но вам все еще нужно подключить страницы, созданные Devise, к вашей целевой странице. На предыдущем этапе вы вручную посетили страницу /users/sign_up, чтобы войти. На этом этапе вы свяжете все страницы, добавив необходимые ссылки на вашу целевую страницу. Вы также условно покажете пользователям ссылки для входа или выхода из приложения в зависимости от их статуса.

Вы сделаете это с помощью нескольких вспомогательных методов от Devise. Gem Devise поставляется с множеством вспомогательных методов, которые вы можете использовать, не реализуя все самостоятельно. Это делает код более читабельным и легким в обслуживании.

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

Откройте файл app/views/home/index.html.erb для редактирования и добавьте выделенные строки:

app/views/home/index.html.erb
<% if user_signed_in? %> 
 <div> Welcome <%= current_user.email %> </div> 
  <%= button_to "Sign out", destroy_user_session_path, method: :delete %> 
<% else %>
  <%= button_to "Sign in", new_user_session_path %> 
<% end %>
<h1>Hello DigitalOcean!</h1>

user_signed_in? поступает из вспомогательных методов, связанных с контроллерами Devise. Он проверяет, вошел ли пользователь в систему, и возвращает логическое значение true или false. Вы можете использовать это результат для программирования других функций в вашем приложении, например, для отображения информации об учетной записи пользователя, если он вошел в систему. Для получения более подробной информации об этом вспомогательном методе вы можете проверить исходный код в хранилище GitHub Devise.

current_user – это вспомогательный метод Devise, который обращается к данным пользователя, который в данный момент вошел в приложение. Например, если вы вошли в систему под [email protected], вспомогательный метод current_user вернет модель пользователя для [email protected]. Таким образом, при использовании current_user.email вы получите [email protected] в качестве результата. Используя Devise, вы избегаете необходимости реализовывать эту логику с нуля, экономя время и усилия.

Наконец, с этим кодом вы добавили кнопки Войти и Выйти на главную страницу. В зависимости от результата метода-помощника user_signed_in?, вы будете показывать опцию войти или выйти, используя вновь добавленные кнопки Войти и Выйти.

Вы используете метод button_to для определения кнопки, которая перенаправляет пользователя на определенный маршрут. Вы также используете методы-помощники для получения этих маршрутов: destroy_user_session_path преобразуется в /users/sign_out и new_user_session_path преобразуется в /users/sign_in. (Вы можете просмотреть полный список помощников URL маршрутов, запустив bundle exec rails routes, как упоминалось ранее.)

Сохраните и закройте файл.

Обновите страницу в браузере, чтобы оценить изменения.

Если вы еще не пытались зарегистрироваться в вашем приложении, вы можете посетить маршрут /users/sign_in, нажав кнопку Войти на вашей странице. Здесь вы можете продолжить, создав новую учетную запись, нажав на ссылку Зарегистрироваться внизу. Введите тестовый адрес электронной почты, например, [email protected], и пароль. После регистрации вы вернетесь на стартовую страницу. Теперь на стартовой странице отображается адрес электронной почты текущего пользователя, вместе с кнопкой Выйти, как показано здесь:

Также вы получите сообщение: Вы успешно зарегистрировались.

И с этим вы успешно интегрировали гем Devise и настроили аутентификацию пользователя в вашем приложении.

Заключение

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

Чтобы лучше понять Devise и получить дополнительные вспомогательные методы, ознакомьтесь с файлом README на репозитории Devise в GitHub. В качестве следующего шага после этого руководства, вы можете попробовать условно отображать приветствие “Hello World!” на странице с чем-то вроде Hello имя_пользователя, в зависимости от того, вошел ли пользователь в систему или нет.

Вы можете найти код для этого проекта в репозитории GitHub сообщества DigitalOcean.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-user-authentication-with-devise-in-a-rails-7-application