Внедрение системы входа в систему с рефреймингом

Я новичок в рефрейминге и не совсем уверен, как создать с ним систему аутентификации/авторизации пользователей.

Из того, что я собрал, я должен создать аутентификацию interceptor и поместить мою логику аутентификации в раздел :before, а затем внедрить перехватчик во все события reg-event-db и reg-event-fx, которые я хочу защитить.

Я на правильном пути?


person Adam Silver    schedule 15.07.2018    source источник


Ответы (1)


Не уверен, что мое решение особенно идиоматично, но я использовал что-то вроде следующего в одном из своих проектов. Считайте, что это работает для меня.

Создайте карту для запроса ajax со специальным значением для случаев ошибки (игнорируйте функцию context-uri):

(defn xhrio-map [method path format success-event]
  {:method          method
   :uri             (context-uri path)
   :timeout         5000
   :response-format format
   :on-success      [success-event]
   :on-failure      [::ajax-failure]})

Затем я использую обработчик fx для сбоя (это немного сложнее, так как он также обрабатывает индикатор загрузки):

(rf/reg-event-fx
 ::ajax-failure
 (fn [{:keys [db]} [_ http-result]]
   (if (= 403 (:status http-result))
     {:db (assoc db :loading-indicator nil)
      :dispatch [::logout]}
     {:db (assoc db :loading-indicator nil)
      :dispatch
      [::error-msg (str "Error fetching from " (:uri http-result)
                        ": " (:response http-result))]})))

События ::logout устанавливают местоположение документа. Это также вызывает выход из системы.

(rf/reg-event-fx
 ::logout
 (fn [coefx [ev]]
   {::location "./logout"}))

Наконец, загрузка ресурсов работает так:

 (defn load-with-indicator [db xhrio-data]
  {:db (assoc db :loading-indicator true)
   :http-xhrio xhrio-data})

(rf/reg-event-fx
 ::load-documentation
 (fn [{:keys [db]} _]
   (load-with-indicator
    db
    (xhrio-map :get "documentation/"
               (ajax/json-response-format {:keywords? true})
               ::received-documentation))))

:received-documentation обрабатывается некоторым кодом, который вызывает правильные функции отображения.

При этом используются https://github.com/Day8/re-frame-http-fx и ajax.core

На серверной части я использую что-то похожее на демонстрационный код, который я опубликовал на https://github.com/ska2342/ring-routes-demo.

Надеюсь, это поможет.

Лицензия кода в этом посте

В дополнение к стандартной лицензии сайта StackOverflow, я также публикую эти строки под лицензией Eclipse Public License либо версии 1.0, либо (по вашему выбору) любой более поздней версии.

person Stefan Kamphausen    schedule 15.07.2018