Как создать отдельную аутентификацию Devise для определенных областей? - PullRequest
0 голосов
/ 22 ноября 2018

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

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

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

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

1 Ответ

0 голосов
/ 22 ноября 2018

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

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

def change
  add_column :users, :special_password, :digest
end

Добавьте гем Bcrypt в свой Gemfile:

gem 'bcrypt', '~> 3.1', '>= 3.1.12'

В свою модель пользователя добавьте следующую строку:

has_secure_special_password

Теперь в вашем специальном контроллере аутентификации по паролю используйте приведенный ниже код для аутентификации current_user с special_password

if current_user.authenticate(params[:user][:special_password])
  session[:special_user_id] = current_user.id
end

Теперь при любых действиях контроллера вы хотите аутентифицировать пользователя с помощьюспециальный пароль, создайте фильтр before_action и попробуйте найти пользователя по session[:special_user_id], и если пользователь не найден, вы можете попросить его ввести special_password

...