Поиск по сайту:

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


Автор выбрал программу Write for DOnations.

Введение

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

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

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

Предпосылки

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

  • Локальная среда разработки для Ruby on Rails. Для Linux вы можете следовать нашей официальной документации по Rails. Для драгоценного камня Devise требуется Ruby версии 2.1.0 или выше; это руководство было протестировано с использованием Ruby версии 3.0.2 и Rails версии 7.0.3.
  • Node.js установлен на вашем компьютере. Некоторые функции Rails, такие как Asset Pipeline, зависят от среды выполнения JavaScript. Node.js предоставляет эту функциональность. Для Ubuntu установите Node.js с помощью официального PPA, как описано в пункте 2 раздела «Как установить Node.js и создать локальную среду разработки в MacOS».
  • Знакомство с Ruby и средой Ruby on Rails. Вы можете ознакомиться с первыми уроками из нашей серии «Руководства по Rails».

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

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

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

  1. rails new blog

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

Примечание. Если вы получили сообщение об ошибке Не удалось найти 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 для конкретного проекта и определенные в нем версии gem. Это полезно, если у вас глобально установлены разные версии одних и тех же гемов.

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

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

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

Чтобы создать целевую страницу, вам необходимо сделать следующее:

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

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

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

  1. nano 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 и добавьте следующие строки:

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 и добавьте следующие строки:

<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? для проверки информации о сеансе любого вошедшего в систему пользователя, сохраненной в файлах cookie браузера. Вы также будете использовать вспомогательную функцию current_user, чтобы получить сведения об учетной записи, в которую в данный момент выполнен вход. Оба метода встроены в Devise, и вы можете использовать их непосредственно в своем приложении без необходимости писать дополнительный код. Вы можете узнать больше об этих вспомогательных методах на странице проекта Devise на GitHub.

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

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

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


# ...

# Reduces boot times through caching; required in config/boot.rb
gem "bootsnap", require: false

# Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
# gem "image_processing", "~> 1.2"

gem "devise" 

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

# ...

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

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

  1. bundle install

Эта команда установит гем 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 могут быть другие блоки кода, но вы можете их игнорировать). ):

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 %>:

...
<body>
  <p class="notice"><%= notice %></p> 
  <p class="alert"><%= alert %></p> 
  <%= yield %>
</body>

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

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

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

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

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

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

Поскольку Rails представляет собой структуру models-view-controller (MVC), с каждой таблицей базы данных связан класс, который можно использовать для работы с данными в таблице. В этом случае, если вы создаете таблицу users, вы можете использовать модель User для выполнения таких операций, как User.first или User .find_by_email(sammy@example.com). Вы можете создать эту модель, создав обычный класс, унаследованный от 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), чтобы просмотреть код по умолчанию:

# frozen_string_literal: true

class DeviseCreateUsers < ActiveRecord::Migration[7.0]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      # 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

      ## Confirmable
      # t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Only if using reconfirmable

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

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

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

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

class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
       :recoverable, :rememberable, :validatable
end

Devise добавляет несколько параметров для настройки работы пользовательской модели. Основные модули (database_authenticable, registerable, recoverable, rememberable и validatable) уже включены. Некоторые дополнительные параметры закомментированы, соответствующие дополнительным функциям, которые вы видели в файле миграции. Вы можете добавить эти модули в файл модели и настроить миграцию в зависимости от того, какой функционал вам нужен в вашем приложении.

Вот что делают основные модули:

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

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

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

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

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 автоматически преобразуется во все эти маршруты, вы можете проверить исходный код метода в репозитории Devise на GitHub.

Вам не нужно вносить здесь никаких изменений, поэтому закройте файл 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-адресу.)

Чтобы проверить аутентификацию, введите тестовый адрес электронной почты, например sammy@example.com, и пароль.

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

Это уведомление об успешной регистрации отображается в теге

<%= note %>

, который вы добавили в application.html.erb. файл.

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

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

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

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

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

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

Откройте файл 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. Вы можете использовать этот результат для программирования других функций в своем приложении, например для отображения информации об учетной записи пользователя, если он выполнил вход. Дополнительные сведения об этом вспомогательном методе можно найти в исходном коде в репозитории Devise GitHub.

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

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

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

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

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

Если вы еще не пробовали зарегистрироваться в своем приложении, вы можете посетить маршрут /users/sign_in, нажав кнопку «Войти» на своей странице. Отсюда вы можете приступить к созданию новой учетной записи, нажав ссылку «Зарегистрироваться» внизу. Введите тестовый адрес электронной почты, например sammy@example.com, и пароль. После регистрации вы снова попадаете на целевую страницу. Теперь на целевой странице отображается адрес электронной почты вошедшего в данный момент пользователя вместе с кнопкой «Выход», как показано здесь:

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

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

Заключение

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

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

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