Как войти в систему с идентификатором пользователя из сессии в LuminusWeb

Я только что сохранил текущего вошедшего в систему пользователя в сеансе. Теперь, как я могу получить идентификатор пользователя из сессии в Selmer шаблоны?. Спасибо

 (defn login-form [{:keys [flash]}]
  (layout/render
   "login_form.html"
   (merge (select-keys flash [:id :pass :errors]))))

(defn authenticate [id pass]
  (when-let [user (db/get-user {:id id})]
    (when (hashers/check pass (:pass user))
      id)))

(defn login! [{:keys [params]}]
  (if-let [id (authenticate (:id params) (:pass params))] ;TODO: Refactor
    (do
    >>>>>>>>>  (update (response/found "/") :session {:id id}))
    (layout/render "login_form.html" {:invalid-credentials? true})))

(defroutes auth-routes
  (GET "/accounts/login/" request (login-form request))
  (POST "/accounts/login/" request (login! request)))

Обновить

Я обновил свою функцию входа в систему. и это работает.

 (defn login! [{:keys [params session]}]
  (if-let [id (authenticate (:id params) (:pass params))] ;TODO: Refactor
    (-> (response/found "/")
      (assoc :session
        (assoc session :id id)))
    (layout/render "login_form.html" {:invalid-credentials? true})))

Чтобы распечатать идентификатор пользователя, я изменил домашние маршруты.

 (defn home-page [opts]
  (layout/render "home.html" opts))

(defroutes home-routes
  (GET "/" {:keys [flash session]} (home-page (or flash session))))

Теперь я могу распечатать пользователя id в home.html шаблон. Но если я использую любой другой URL, то пользователь id перестал `отображать``.

Вопрос > Так что мне нужно пройти {:keys [flash session]} на каждом маршруте?

1 ответ

Вы можете использовать wrap-identity промежуточное программное обеспечение, которое Luminus обеспечивает, убедившись, что оно в вашем wrap-base стек, затем изменить :id в :identity в вашем session, Теперь вы можете позвонить (layout/render "home.html") (даже без предоставления опций!), и вы можете получить доступ к личности с помощью {{identity}}

Другие вопросы по тегам