ruby on rails 3 вопрос про before_filter - PullRequest
1 голос
/ 16 июля 2010

Может кто-нибудь объяснить мне, что здесь происходит?

Я чувствую, что в документации много не говорится и не описывается происходящее. просто скажи использовать этот метод, как этот.

что произойдет, если имя пользователя и пароль верны, что произойдет, если false и т. Д.?

class AdminController < ApplicationController
  USERNAME, PASSWORD = "humbaba", "5baa61e4"

  before_filter :authenticate

  private

  def authenticate
    authenticate_or_request_with_http_basic do |username, password|
      username == USERNAME &&
      Digest::SHA1.hexdigest(password) == PASSWORD
    end
  end
end

спасибо

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

Метод before_filter гарантирует, что приватный метод authenticate будет запущен перед всеми запросами.

authenticate_or_request_with_http_basic открывает окно браузера "введите свое имя пользователя и пароль" и передает их в блок, как username и password, в данном случае.

Если блок возвращает true (если имя пользователя и пароль совпадают), запрос переходит к вашему более конкретному коду.Если блок возвращает false (имя пользователя и пароль не совпадают), запрос прерывается, и возвращается страница сбоя аутентификации с правильным кодом статуса HTTP.Браузер может повторить запрос еще несколько раз, прежде чем отобразить страницу ошибки.

1 голос
/ 16 июля 2010

В каждый браузер встроена стандартная функция аутентификации, называемая «Базовая HTTP-аутентификация». Я уверен, что вы видели общее диалоговое окно имени пользователя / пароля (стилизованное как часть вашей операционной системы), отображаемое на веб-страницах. Вот и все.

Работает следующим образом:

  • Браузер отправляет запрос GET для защищенного URL
  • Сервер отправляет ответ 401, что означает «Требуется авторизация»
  • Браузер знает, что это значит, и выдает пользователю диалоговое окно с полями user / pass
  • Когда пользователь отправляет запрос, браузер отправляет еще один запрос GET, но с заголовком авторизации, содержащим имя пользователя и пароль в кодировке base64
  • Сервер проверяет, и в случае успеха - отправляет обратно 200 успешных ответов с содержимым запрошенной страницы

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

В случае отказа в доступе Rails отправляет обратно 403 Запрещенный ответ, и браузер имеет встроенный способ показать это.

Чтобы узнать больше: http://en.wikipedia.org/wiki/Basic_access_authentication

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