У меня есть два набора маршрутов compojure: общедоступные, для которых не требуется аутентификация, и частные, для которых требуется аутентификация. .
(defroutes public-routes
(GET "/" [] homepage-handler))
(defroutes private-routes
(GET "/secrets" [] secrets-handler))
Я создал промежуточное программное обеспечение, которое проверяет, аутентифицирован ли пользователь, и либо продолжает цепочку промежуточного программного обеспечения, либо поднимает его.
(defn wrap-must-be-authenticated [handler]
(fn [request]
(if (authenticated? request)
(handler request)
(throw-unauthorized))))
(def app
(-> private-routes
(wrap-must-be-authenticated)))
Это отлично работает, все «частные маршруты» требуют аутентификации.
Как мне добавить public-routes
, чтобы они были исключены из wrap-must-be-authenticated
?
Я считаю, что defroutes
возвращает обработчики кольца, поэтому я думаю, что мне нужно сделать что-то вроде:
(-> (wrap-must-be-authenticated private-routes)
public-routes)