Angular 2+ и dotnet core 2.1 - настроить аутентификацию вручную

Был тот же самый вопрос сегодня, за исключением того, что мне нужно было установить другой референт на тест. Я закончил использование промежуточного программного обеспечения и класса, чтобы передать ему заголовки. Думаю, что я поделюсь (или, может быть, есть более чистое решение?):

lib/request_headers.rb:

class CustomHeadersHelper
  cattr_accessor :headers
end

class RequestHeaders
  def initialize(app, helper = nil)
    @app, @helper = app, helper
  end

  def call(env)
    if @helper
      headers = @helper.headers

      if headers.is_a?(Hash)
        headers.each do |k,v|
          env["HTTP_#{k.upcase.gsub("-", "_")}"] = v
        end
      end
    end

    @app.call(env)
  end
end

config/initializers/middleware.rb

require 'request_headers'

if %w(test cucumber).include?(Rails.env)
  Rails.application.config.middleware.insert_before Rack::Lock, "RequestHeaders", CustomHeadersHelper
end

spec/support/capybara_headers.rb

require 'request_headers'

module CapybaraHeaderHelpers
  shared_context "navigating within the site" do
    before(:each) { add_headers("Referer" => Capybara.app_host + "/") }
  end

  def add_headers(custom_headers)
    if Capybara.current_driver == :rack_test
      custom_headers.each do |name, value|
        page.driver.browser.header(name, value)
      end
    else
      CustomHeadersHelper.headers = custom_headers
    end
  end
end

spec/spec_helper.rb

...
config.include CapybaraHeaderHelpers

Тогда я могу включить общий контекст где мне нужно, или передать разные заголовки в другой блок before. Я не тестировал его ни с чем другим, кроме Selenium и RackTest, но он должен быть прозрачным, поскольку вставка заголовка выполняется до того, как запрос действительно попадет в приложение.

1
задан ToTa 23 February 2019 в 21:57
поделиться

1 ответ

Существуют различные способы реализации вашей собственной аутентификации, но рекомендуется вместо этого использовать .net core Identity и переопределить все, что вы хотите, .net core Identity была реализована таким образом, чтобы пользователи могли изменять каждую ее часть на их использование. Вы можете прочитать код Identity на github . Чтобы использовать простое решение для аутентификации, вы также можете использовать специальное промежуточное программное обеспечение Authorize, которое получает JWT и проверяет его.

0
ответ дан amirhossein ghorbani 23 February 2019 в 21:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: