Предварительная авторизация в Devise - PullRequest
0 голосов
/ 05 февраля 2019

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

Мы изучили devise_invitable, но решили не использовать его, потому что не хотим собирать адреса электронной почты от сотрудников.

Я реализовал это, создав собственное представление полномочий и контроллер для проверки комбинации номера сотрудника и кода доступа.Вот что я сделал:

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

def check_authorization
  if employee number and code are correct
    token = SecureRandom.base58(36)
    set database value to token
    session[:authentication_token] = token
    redirect_to devise_new_user_registration_path
  else
    render 'authorize'
  end
end

В контроллере регистрации Devise проверьте токен сеанса, который совпадает с токеном в базе данных, если не найден поток перенаправления в мой пользовательский контроллер авторизации.Я также написал вспомогательный метод для очистки авторизаций после передачи управления Devise.Я внес изменения в методы new и create и оставил все остальное как есть.Еще псевдокод:

def new
  if( get_authorization( session[:ot_authorization_token] ) == nil )
    redirect_to custom_authorization_path
  else
    super
  end
end
def create
  authorization = get_authorization( session[:ot_authorization_token] )
  if( authorization == nil )
    redirect_to custom_authorization_path
  else
    super do |authorization|
      clean_up( authorization )
    end
  end
end

Будет ли это работать?Я что-то пропустил?Заранее спасибо за помощь.

...