Clojure / Noir: принудительное HTTPS, перенаправление, если запрос был http:// to https://
Я пытаюсь заставить SSL на моем сайте. Я хочу иметь промежуточное ПО в стиле кольца для перенаправления сайта на тот же URL с https, если это только http
Я написал следующий код, но он ничего не делает, кроме проверки схемы запроса и печати URL-адреса, на который он должен перенаправляться.
(defn https-url [request-url]
(str (str (str (str "https://" (:server-name request-url) ":") (:server-port request-url))) (:uri request-url)))
(defn require-https
[handler]
(fn [request]
(let [page-request (handler request)]
(if (= (:scheme page-request) :http)
(println (https-url page-request))))))
(server/add-middleware require-https)
Как мне реализовать это в реальном приложении?
Я использую Clojure 1.2 с Noir.
Примечание: Как мне объединить несколько строк в одну строку без использования нескольких вложенных строк?
1 ответ
Решение
Ты можешь использовать ring.util.response/redirect
:
(fn handler [request]
(if need-to-redirect?
;; NB. target-url should be a string
(ring.util.response/redirect target-url)
...))
Что касается примечания, str
Вариативно:
(str "foo" 'bar "baz")
; => "foobarbaz"