1

我刚刚将当前登录的用户保存在会话中。现在如何从Selmer模板中的会话中获取用户 ID?谢谢

 (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})))

为了打印用户的 ID,我更改了主路由。

 (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]}每条路线吗?

4

1 回答 1

1

您可以使用wrap-identityLuminus 提供的中间件,方法是确保它在您的wrap-base堆栈中,然后更改:id:identity在您的session. 您现在可以调用(layout/render "home.html")(即使不提供选项!),您可以使用访问身份{{identity}}

于 2016-11-23T07:07:59.813 回答