В 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, чтобы быть понятным)