2013-12-03 5 views
1

Я использую метод 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.

ответ

0

Благодаря этому замечательному сообщению в блоге о предмете следующий код делает изгиб/401 шаблон изящно. (Предпочтительно, чтобы очистить использовать супер вместо устаревшего метода alias_chaining)

конфигурации/инициализаторы/authentication.rb

ActionController::HttpAuthentication::Digest.module_eval do 
    def authentication_request_with_customization(controller, realm, message = nil) 
    message = controller.render_to_string(template: "errors/401") 
    authentication_request_without_customization(controller, realm, message) 
    end 
    alias_method_chain :authentication_request, :customization 
end 

Оригинал сообщения: http://p373.net/2013/11/16/how-to-customize-http-digest-authentication-error-pages-in-ruby-on-rails/

Смежные вопросы