Ruby on Rails 5.2 - ActionController::HttpAuthentication::Basic

मॉड्यूल ActionController :: HttpAuthentication :: मूल




ruby

मॉड्यूल ActionController :: HttpAuthentication :: मूल

HTTP बेसिक प्रमाणीकरण करना आसान बनाता है।

सरल मूल उदाहरण

 class PostsController < ApplicationController
   http_basic_authenticate_with name: "dhh", password: "secret", except: :index

   def index
     render plain: "Everyone can see me!"
   end

   def edit
     render plain: "I'm only accessible if you know the password"
   end
end

उन्नत मूल उदाहरण

यहां एक अधिक उन्नत मूल उदाहरण है जहां केवल एटम फ़ीड और XML API HTTP प्रमाणीकरण द्वारा संरक्षित है, नियमित HTML इंटरफ़ेस एक सत्र दृष्टिकोण द्वारा संरक्षित है:

class ApplicationController < ActionController::Base
  before_action :set_account, :authenticate

  private
    def set_account
      @account = Account.find_by(url_name: request.subdomains.first)
    end

    def authenticate
      case request.format
      when Mime[:xml], Mime[:atom]
        if user = authenticate_with_http_basic { |u, p| @account.users.authenticate(u, p) }
          @current_user = user
        else
          request_http_basic_authentication
        end
      else
        if session_authenticated?
          @current_user = @account.users.find(session[:authenticated][:user_id])
        else
          redirect_to(login_url) and return false
        end
      end
    end
end

अपने एकीकरण परीक्षणों में, आप ऐसा कुछ कर सकते हैं:

def test_access_granted_from_xml
  @request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials(users(:dhh).name, users(:dhh).password)
  get "/notes/1.xml"

  assert_equal 200, status
end

सार्वजनिक प्रवृत्ति के तरीके

स्रोत_परम (अनुरोध) स्रोत दिखाएं
# File actionpack/lib/action_controller/metal/http_authentication.rb, line 119
def auth_param(request)
  request.authorization.to_s.split(" ", 2).second
end
source_scheme (अनुरोध) स्रोत दिखाएं
# File actionpack/lib/action_controller/metal/http_authentication.rb, line 115
def auth_scheme(request)
  request.authorization.to_s.split(" ", 2).first
end
प्रमाणीकृत करें (अनुरोध, और login_procedure) स्रोत दिखाएं
# File actionpack/lib/action_controller/metal/http_authentication.rb, line 97
def authenticate(request, &login_procedure)
  if has_basic_credentials?(request)
    login_procedure.call(*user_name_and_password(request))
  end
end
प्रमाणीकरण_ क्रेक (नियंत्रक, दायरे, संदेश) स्रोत दिखाएं
# File actionpack/lib/action_controller/metal/http_authentication.rb, line 127
def authentication_request(controller, realm, message)
  message ||= "HTTP Basic: Access denied.\n"
  controller.headers["WWW-Authenticate"] = %(Basic realm="#{realm.tr('"'.freeze, "".freeze)}")
  controller.status = 401
  controller.response_body = message
end
decode_credentials (अनुरोध) स्रोत दिखाएं
# File actionpack/lib/action_controller/metal/http_authentication.rb, line 111
def decode_credentials(request)
  ::Base64.decode64(auth_param(request) || "")
end
encode_credentials ( user_name , पासवर्ड) स्रोत दिखाएं
# File actionpack/lib/action_controller/metal/http_authentication.rb, line 123
def encode_credentials(user_name, password)
  "Basic #{::Base64.strict_encode64("#{user_name}:#{password}")}"
end
has_basic_credentials? (अनुरोध) स्रोत दिखाएँ
# File actionpack/lib/action_controller/metal/http_authentication.rb, line 103
def has_basic_credentials?(request)
  request.authorization.present? && (auth_scheme(request).downcase == "basic")
end
user_name_and_password (अनुरोध) स्रोत दिखाएँ
# File actionpack/lib/action_controller/metal/http_authentication.rb, line 107
def user_name_and_password(request)
  decode_credentials(request).split(":", 2)
end