Как войти в систему с идентификатором пользователя из сессии в 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}}