Что делает authenticate_with_http_basic в Ruby on Rails? - PullRequest
18 голосов
/ 24 февраля 2011

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

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

Ответы [ 2 ]

23 голосов
/ 24 февраля 2011

Этот метод позволяет вам реализовать базовую аутентификацию 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']). Вы можете просмотреть более подробную информацию о функции авторизации здесь .

6 голосов
/ 22 сентября 2016

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

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

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

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

HTH (разговор о Rails 5 будет понятен)

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