Генератор аутентифи...
 
Уведомления
Очистить всё

Генератор аутентификации в Rails 8: выкидывать Devise или рано?

7 Сообщения
6 Пользователи
6 Реакции
347 Просмотры
Валерий40
Сообщения: 33
Автор темы
Читает чужие PR фулстек-разработчик
Присоединился: 4 года назад
[#57]

Начинаю пет-проект на Rails 8.0, попробовал bin/rails generate authentication. Сгенерировалось немного: модели User и Session, concern Authentication, контроллеры входа и сброса пароля. Регистрации нет, подтверждения почты нет. В Laravel я привык к готовому пакету, тут уже привык к Devise. Стоит ли возиться с генератором или проще поставить Devise, как всегда?


6 ответов
kostya.sokurov
Сообщения: 73
Держит прод бэкенд-разработчик, senior
Присоединился: 4 года назад

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

class SessionsController < ApplicationController
  allow_unauthenticated_access only: %i[new create]
  rate_limit to: 10, within: 3.minutes, only: :create

  def create
    if user = User.authenticate_by(params.permit(:email_address, :password))
      start_new_session_for user
      redirect_to after_authentication_url
    else
      redirect_to new_session_path, alert: "Неверный email или пароль"
    end
  end
end

authenticate_by появился в 7.1, он тратит одинаковое время и на верный пароль, и на несуществующий email. Сессии хранятся в таблице, поэтому «выйти на всех устройствах» это просто удалить записи. Регистрация это один контроллер строк на двадцать. Чего нет: подтверждения почты, блокировки после неудачных попыток, входа через сторонние сервисы. Если всё это нужно с первого дня, Devise по-прежнему разумный выбор.


Ответ
lena_bogatyreva
Сообщения: 27
Читает чужие PR бэкенд-разработчица
Присоединился: 3 года назад

Полдня в Devise это прямо про меня: искала, где менять редирект после входа, оказалось after_sign_in_path_for в ApplicationController


Ответ
Егор64
Сообщения: 30
Читает чужие PR тимлид
Присоединился: 3 года назад

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


Ответ
gosha70
Сообщения: 17
Пишет тесты бэкенд-разработчик, удалёнка
Присоединился: 3 года назад

Генератор не про API, имейте в виду: он под куки и обычные формы. Для мобилки токены всё равно придётся дописывать


Ответ
Валерий40
Сообщения: 33
Автор темы
Читает чужие PR фулстек-разработчик
Присоединился: 4 года назад

Убедили, для пет-проекта беру генератор. Регистрацию дописал за вечер: контроллер, форма, start_new_session_for после создания. Подтверждение почты сделал через generates_token_for :email_confirmation, expires_in: 2.days, тоже из 7.1, очень удобно. Неудачные попытки входа пока закрывает rate_limit из того же генератора, для пет-проекта хватает. Поправить пришлось только письмо сброса пароля: оно по умолчанию на английском, перевёл шаблон и тексты в контроллере. На Laravel это был бы пакет, а тут сорок строк своего кода.


Ответ
1 ответ
artem_67
Присоединился: 4 года назад

Пишет тесты разработчик на Go
Сообщения: 18

сорок строк своего кода, которые теперь ваши навсегда) Но читать их правда проще, чем чужой гем


Ответ