Я использую метод authenticate_or_request_with_http_digest с рельсами 4, чтобы администратор мог войти и выполнить некоторые простые задачи. Все ссылки и источники внизу.Пользовательская страница 401 с authenticate_or_request_with_http_digest failure - rails 4
application_controller.rb
before_action :authenticate, only: :index # etc
def authenticate
authenticate_or_request_with_http_digest(CONFIG[:realm]) do |username|
session[:admin] = username
USERS[username]
end
end
Это работает, как ожидалось, однако по умолчанию страница 401 визуализации, когда пользователь отменяет процесс Логин ужасен, это пустая страница с текстом. Я использую собственные шаблоны ошибок, как показано на Railscasts.com EP # 53, и было бы замечательно, если бы я мог использовать одно и то же соглашение для этой ошибки 401.
Есть ли способ изменить метод ниже, так что отображает пользовательскую страницу 401 (желательно без включения всего вида контроллера и помощников URL) или более простой способ для достижения динамической страницы 401?
ActionController::HttpAuthentication::Digest.module_eval do
def authentication_request(controller, realm, message = nil)
message ||= "You are unauthorized to access this page.\n"
authentication_header(controller, realm)
controller.response_body = message
controller.status = 401
end
end
Источники
Railscasts EP#53
Пользовательские шаблоны ошибок: http://railscasts.com/episodes/53-handling-exceptions-revised -
authenticate_request
метод, который, кажется, управляют 401 обработки, источник можно увидеть в полном объеме: https://github.com/rails/rails/blob/04cda1848cb847c2bdad0bfc12160dc8d5547775/actionpack/lib/action_controller/metal/http_authentication.rb#L244
authenticate_or_request_with_http_digest
метода и пример можно посмотреть здесь: http://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Digest.html#method-i-authentication_request.