Рейтит ринг. Аутентификация и авторизация только в одном наборе маршрутов на Luminus - PullRequest
0 голосов
/ 17 января 2020

Я занимаюсь разработкой сайта с помощью Luminus, до сих пор моя функция связывания промежуточного программного обеспечения выглядит следующим образом:

(defn wrap-base [handler]
  (-> ((:middleware defaults) handler)
  wrap-auth
  (wrap-access-rules {:rules rules :on-error on-error})
  (wrap-authentication (session-backend))
   wrap-flash
  (wrap-defaults
    (-> site-defaults
        (assoc-in [:security :anti-forgery] false)
        (assoc-in  [:session :store] (ttl-memory-store (* 60 30)))))
  wrap-internal-error))

и мой файл route / home.clj:

 (defn home-routes []
   [""
     {:middleware [middleware/wrap-csrf
                   middleware/wrap-formats]}
     (merge public-routes admin-routes)])

но теперь мне нужно разработать новый API ("/ api / getcustomers"), поэтому все промежуточное ПО для аутентификации / авторизации (и csrf) должно быть только для "домашних маршрутов", а не для новых маршрутов API. Маршруты API сохраняются в новом файле route / services.clj.

К счастью, Luminus использует reitit.ring, решение для маршрутизации на основе данных, но я не уверен, как переместить аутентификацию / авторизацию общего промежуточного программного обеспечения и назначьте его только для раздела "home-маршруты".

1 Ответ

0 голосов
/ 19 января 2020

Я заканчиваю создание правила для нового API в кольце:

    (defn open-gates [request]
       true)

  (def rules [{:pattern #"^/admin.*"
         :handler admin-access
         :redirect "/notauthorized"},
        {:pattern #"^\/vclass.*"
         :handler user-access
         :redirect "/notauthorized"},
        {:pattern #"^\/api.*"
         :handler open-gates
         :redirect "/notauthorized"},
        {:pattern #"^/user.*"
         :handler authenticated?}])
...