Создание входа в систему в Ruby on Rails

Хотите простой логин для вашего приложения на rails? Я расскажу об этом в данном руководстве.

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

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

Создание страниц

Я создам две страницы, admin и home.

Создайте представления, admin.html.erb и home.html.erb в app/views/pages/.

    // app/views/pages/admin.html.erb

   <h1>Admin Home</h1>
   <p>app/views/pages/admin.html.erb</p>
Вход в полноэкранный режим Выход из полноэкранного режима
    // app/views/pages/home.html.erb

   <h1>Home</h1>
   <p>app/views/pages/home.html.erb</p>
Войдите в полноэкранный режим Выход из полноэкранного режима

Теперь создайте контроллер для этих страниц в app/controllers/.

  # app/controllers/pages_controller.rb

  class PagesController < ApplicationController
    def home
    end

    def admin
    end
  end
Войти в полноэкранный режим Выйти из полноэкранного режима

Наконец, создайте маршруты для этих страниц.

  # config/routes.rb

  get "/admin" => "pages#admin", as: "admin"

  root "pages#home"
Войти в полноэкранный режим Выйдите из полноэкранного режима

Страницы должны работать, если проверить ваш локальный хост. Страница для localhost:3000 должна быть app/views/pages/home.html.erb, а localhost:3000/adminapp/views/pages/admin.html.erb.

Создание входа в систему

Теперь, когда страницы сделаны, мы начнем реализовывать систему входа. Я буду использовать devise gem. В нем есть все, что нужно для простого входа в систему.

  1. Установите devise gem, добавив его в свой Gemfile:

    gem 'devise'
    

    Затем запустите bundle install.

  2. Сгенерируйте необходимые файлы для devise, запустив это в терминале:

    $ rails generate devise:install
    

    Если вы используете rails 7, вы можете столкнуться с ошибкой. Вам может понадобиться вставить этот код в ваш config/initializers/devise.rb:

    источник

  3. Создайте файлы миграции, которые мы будем использовать.

    $ rails generate devise MODEL
    

    Замените MODEL на имя класса, используемого для пользователей приложения (я в основном использую User, но может быть и Admin).

    Затем запустите rails db:migrate.

  4. Требуйте, чтобы пользователь входил в систему при посещении страницы администратора.

    Это можно сделать, обновив app/controllers/pages.

    class PagesController < ApplicationController
     before_action :authenticate_user!, only: :admin
    
     def home
     end
    
     def admin
     end
    end
    

    Функция before_action :authenticate_user! будет проверять, вошел ли пользователь в систему. В зависимости от модели вам может понадобиться изменить на authenticate_MODEL!, например, если вы решили назвать свою модель devise Admin, то это должно быть authenticate_admin!.

    Добавив only: :admin, действие будет выполняться только при действии admin(app/views/pages/admin.html.erb).

Это должно помочь! Перезапустите ваш сервер и проверьте его!

Добавление ссылок (необязательно)

Здесь я добавлю ссылки входа и выхода для сайта.

  1. Создайте файл _user_detail.html.erb вapp/views/shared/.

    // app/views/shared/_user_detail.html.erb
    <% if user_signed_in? %>
     <%= button_to("Log Out", destroy_user_session_path, method: :delete) %>
    <% else %>
     <%= link_to 'Log in', new_user_session_path %>
    <% end %>
    

    Если вы используете rails 7, кнопка выхода из системы может работать некорректно, вам нужно использовать это:
    <%= button_to("Log Out", LOGOUT_PATH, method: :delete) %>.
    источник

    Пути здесь — это пути входа и выхода. Вы можете проверить свои, запустив rails routes.

    user_signed_in? — это помощник в devise. Он возвращает true или false в зависимости от того, вошел ли пользователь в систему. Это может меняться в зависимости от выбранного имени для модели devise. Если вы выбрали Admin, то это должно быть admin_signed_in?.

  2. Добавьте ссылки на app/views/pages/home.html.erb и app/views/pages/admin.html.erb.

    <%= render "shared/user_detail"%>
    

Ссылки:

  • https://stackoverflow.com/questions/36646226/undefined-method-user-url-for-devise-sessionscontrollercreate
  • https://dev.to/spaquet/rails-7-devise-log-out-d1n
  • https://github.com/heartcombo/devise

Вы можете ознакомиться с моим репозиторием здесь.

Пожалуйста, не репостите

Оцените статью
Procodings.ru
Добавить комментарий