промежуточное программное обеспечение wrap-cors не работает с system.components - PullRequest
0 голосов
/ 05 марта 2020

У меня есть следующая конфигурация промежуточного программного обеспечения system.components, в которой я использую wrap-cors ring.middleware для перенаправления на внешний сервер:

(defn config []
  {:http-port  (Integer. (or (env :port) 5000))
   :middleware [[wrap-defaults api-defaults]
                wrap-with-logger
                wrap-gzip
                ignore-trailing-slash
                [wrap-reload {:dir "../../src"}]
                [wrap-trace :header :ui]
                wrap-params
                wrap-keyword-params
                wrap-cookies
                [wrap-cors :access-control-allow-headers #{"accept"
                                                            "accept-encoding"
                                                            "accept-language"
                                                            "authorization"
                                                            "content-type"
                                                           "origin"}
                 :access-control-allow-origin [#"https://some-url"]
                 :access-control-allow-methods [:delete :get
                                                :patch :post :put]]
                ]})

И это должно вставьте заголовки в каждый ответ. Но вместо этого, по запросу клиента, который приводит к перенаправлению на https://some-url, я получаю следующую ошибку в клиентском браузере:

Access to XMLHttpRequest at 'https://someurl' (redirected from 'http://localhost:5000/some-uri') from origin 'http://localhost:5000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Почему это не правильно заголовки в ответе, несмотря на добавление промежуточного программного обеспечения?

- EDIT -

Я также пробовал промежуточное программное обеспечение wrap-cors [jumblerg.middleware.cors] примерно так:

(defn config []
  {:http-port  (Integer. (or (env :port) 5000))
   :middleware [[wrap-defaults api-defaults]
                wrap-with-logger
                wrap-gzip
                ignore-trailing-slash
                [wrap-reload {:dir "../../src"}]
                [wrap-trace :header :ui]
                wrap-params
                wrap-keyword-params
                wrap-cookies
                [wrap-cors #".*"]
                ]})

И добавили заголовки с помощью команды liberator, например, так:

(defresource some-route [redirect-uri]
  :available-media-types ["application/json"]
  :allowed-methods [:post]
  :post-redirect? true
  :as-response (fn [d ctx]
                 ;; added headers
                 (-> (as-response d ctx)
                     (assoc-in [:headers "Access-Control-Allow-Origin"] "*")
                     (assoc-in [:headers "Access-Control-Allow-Headers"] "Content-Type")
                     )

                 )
   ;; redirect uri
  :location redirect-uri

  )

Но все равно получите заголовок `` `` No 'Access-Control-Allow-Origin' на запрошенном ресурсе. `` `ошибка

1 Ответ

1 голос
/ 05 марта 2020

Попробуйте эту библиотеку для (wrap-cors): [jumblerg/ring-cors "2.0.0"]

следующим образом: (wrap-cors your-routes identity)

Обратите внимание, что третий параметр - это функция, позволяющая определить, разрешен ли источник (или список of reg exp)

Возможно, вам придется добавить маршрут вручную:

(OPTIONS "/yourendpoint" req {:headers {"Access-Control-Allow-Headers" "*"}})

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