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")これで(opts を提供しなくても!)呼び出すことができ、次を使用して ID にアクセスできます。{{identity}}

于 2016-11-23T07:07:59.813 に答える