Условная базовая аутентификация HTTP - PullRequest
6 голосов
/ 02 ноября 2011

Я хочу реализовать базовую аутентификацию HTTP на моем промежуточном сервере, но только для тех, кто находится за пределами локальной сети. У меня есть приложение Rails 3.1. В application.rb у меня есть следующее:

class ApplicationController << ActionController::Base
  http_basic_authenticate_with :realm => "Staging", :name => "user", :password => "password" if :need_authentication?

private

  def need_authentication?
    Rails.env == "staging" && request.remote_addr !~ /^192.168.0.\d{1,3}$/
  end

end

Вот в чем проблема: даже когда need_authentication? метод явно возвращает false, приложение все еще просит меня пройти аутентификацию, как если бы оно полностью игнорировало предложение if в конец.

Итак, есть ли способ требовать аутентификацию только при определенных условиях?

Ответы [ 2 ]

7 голосов
/ 29 мая 2014

В Rails 4 работает условие if. Например,

class ApplicationController < ApplicationController::Base
  http_basic_authenticate_with name: "user", password: "password" if Rails.env == 'staging'
end

или если вы хотите, чтобы вспомогательный метод устанавливал условие,

class ApplicationController < ApplicationController::Base
  http_basic_authenticate_with name: "user", password: "password", if: :need_authentication?

  private
  def need_authentication?
    Rails.env == 'staging'
  end
end
6 голосов
/ 03 ноября 2011

Вот что сработало:

class ApplicationController < ActionController::Base
  before_filter :authenticate_if_staging

private

  def authenticate_if_staging
    if Rails.env == 'staging' && request.remote_addr !~ /^192.168.0.\d{1,3}$/
      authenticate_or_request_with_http_basic 'Staging' do |name, password|
        name == 'username' && password == 'secret'
      end
    end
  end
end

«Постановка» - это название мира. Это не обязательно, но может быть использовано для разъяснения.

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