В Ruby on Rails, что делает authenticate_with_http_basic?

Restful Authentication использует authenticate_with_http_basic, но поиск в сети может найти много страниц без описания. На официальном http://api.rubyonrails.org/ его также можно найти, за исключением того, что нет описания, комментариев, без спецификации.

Что он делает? он, похоже, может использовать login_name и password из HTTP-запроса, а затем их можно сравнить с login_name и encrypted_password в таблице users... но это тот случай, почему не существует даже описания из 1 строки?

Ответы

Ответ 1

Этот метод позволяет реализовать базовую HTTP-аутентификацию (вид, в котором появляется небольшое диалоговое окно с запросом имени пользователя и пароля). Как правило, это отличный способ ограничить доступ к сайту разработки или области администрирования. Например:

class AdminController < ApplicationController
  before_filter :authenticate

  def authenticate
    authenticate_or_request_with_http_basic('Administration') do |username, password|
      username == 'admin' && password == 'password'
    end
  end
end

Эта функция будет либо запрашивать базовое имя пользователя и пароль для проверки подлинности HTTP, либо после того, как оно было введено, оно действительно проверит, была ли проверка подлинности правильной. Другими словами, эта функция вызовет authenticate_with_http_basic или вызовет request_http_basic_authentication. Вы можете узнать больше об этом и увидеть больше примеров здесь. Обычно вы вызываете authenticate_or_request_with_http_basic вместо вызова authenticate_with_http_basic или request_http_basic_authentication, поскольку первая функция будет соответствовать всем последним функциям.

P.S: authenticate_with_http_basic не использует переменные POST, он использует информацию заголовка, чтобы получить имя пользователя и пароль (request.env ['HTTP_AUTHORIZATION']). Вы можете просмотреть дополнительную информацию о функции авторизации здесь.

Ответ 2

Некоторые подробности, которые могли бы сэкономить мне время, если бы я мог их прочитать где угодно.

Я поиграл с ним. authenticate_with_http_basic просто считывает basic-auth user/pass от запроса и выполняет внутренний блок, когда такая информация присутствует в запросе. Если auth не отправляется клиентом, он возвращает nil. В противном случае он возвращает все, что оценивается блоком.

Таким образом, вы можете использовать возвращаемое значение, чтобы решить, следует ли делать request_http_basic_authentication, возвращать 403 запрещено или отображать содержимое.

FYI, если вы используете это из метода, зарегистрированного как крючок before_action, я заметил, что возвращаемое значение этого метода не учитывается. В случае, если метод rendered что-то или redirected, действие не выполняется. Если метод не render или redirect, тогда действие выполняется.

HTH (говорить о Rails 5, чтобы быть понятным)