Используя Ruby на рельсах, можно ли иметь несколько типов пользователей с использованием сеансов и аутентификации (gem bcrypt)? - PullRequest
0 голосов
/ 27 мая 2020

Извините, если вопрос сформулирован странно, но я имею дело со следующим сценарием:

Я пытаюсь создать базовое c веб-приложение, используя рельсы для назначенного проекта, и решил создать в основном онлайн-версия аптеки. Позже будет больше сложностей, но сейчас я считаю, что мне просто нужно создать модель пациента, контроллер, маршруты и представления, и я хочу иметь аутентификацию входа с использованием драгоценного камня bcrypt, а также доктора, который делает все то же самое. вещи, но они будут дискретно обращаться к своим собственным страницам просмотра и смогут только после аутентификации. Я использую контроллер сеанса и также имею представления сеанса. На данный момент это становится для меня сложным, так как я новичок в программировании, и я не смог найти ответ на вопрос, можно ли сделать все это только с помощью «пользователей» (как это делают все примеры и руководства) , или через отдельные типы пользователей, как я сейчас пытаюсь настроить (например, «Пациенты» и «Врачи»). Я очень ценю любую помощь! Я постараюсь уточнить, если потребуется.

Ответы [ 2 ]

0 голосов
/ 03 июля 2020

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

def create
if params[:patient]
  @patient = Patient.find_by(email: params[:email])
  if @patient && @patient.authenticate(params[:password])
    session[:patient_id] = @patient.id
    redirect_to @patient
  else
    render 'patients/login'
  end
elsif params[:doctor]
  @doctor = Doctor.find_by(email: params[:email])
  if @doctor && @doctor.authenticate(params[:password])
    session[:doctor_id] = @doctor.id
    redirect_to @doctor
  else
    render 'doctors/login'
  end
end
end
0 голосов
/ 27 мая 2020

Используя гем 'Devise' (и его расширения), вы можете делать все это, в том числе для разных типов пользователей. Кстати, devise фактически использует bcrypt в своей собственной реализации.

https://github.com/heartcombo/devise

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...