У меня есть веб-сайт, который я разрабатываю, внутренний маршрут, который не работает, это / login с compojure маршрутом как:
(POST login "/" [] check-admin-before-logging)
Вот что делает функция check-admin-before-logging:
(defn redirect-admin-to-page
[]
(-> (response/redirect "/admin/home")
(assoc :body "logging you in...")
(assoc :cookies {:token (token/sign-token)})))
;; function that checks whether credentials are in fact valid.
;; check-admin is a db func which compares hashed pswd with input.
(defn check-admin-before-logging-in
[request]
(let [username (:username (:params request))
password (:password (:params request))]
(if (check-admin username password)
(redirect-admin-to-page username)
(str "username : " username " and password " password " is not valid.\n" request))))
На данный момент он просто возвращает строку, как в целях тестирования.
и для приложения я обернул его в следующее промежуточное ПО:
(def app
(-> all-routes
(wrap-defaults (assoc-in site-defaults [:security :anti-forgery] false))
(wrap-json-body)
;; (wrap-json-params)
(wrap-json-response)
))
Теперь, когда я делаю AJAX-запрос со следующим интерфейсом:
(defn submit
[]
(let [username *grabbed from input field...*
password *grabbed from input field...*]
(POST "/login" {:params {:username username :password password}})))
Но проблема возникает, когда я нажимаю кнопку Я получаю это . Консоль показывает результат самого запроса post: параметры: пустые, а некоторые искаженные данные JSON в ключе: body. Если бы я попытался включить
(wrap-json-params)
в приложении я получу ноль в ключах: body и: params. Более того, кажется, что есть проблема с выводом, поскольку у cheshire есть проблемы с его разбором. Если я оставлю библиотеку ring-json в стороне и просто установлю значения по умолчанию для приложения, я получу это для ключа тела
:body #object[org.eclipse.jetty.server.HttpInputOverHTTP 0x6ef9a9e1 HttpInputOverHTTP@6ef9a9e1]
У меня вопрос, как мне изменить json, чтобы его можно было понять с помощью wrap-json-params или cheshire? Любой совет очень ценится.