gpt4 book ai didi

clojure - 确保 var 在 Clojure 中绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 11:11:11 25 4
gpt4 key购买 nike

在我的中间件中,我检查 :session 的值以查看用户是否已登录。

如果设置了 :session 的值,效果会很好。虽然,我不确定检查 :session 是否已绑定(bind)的最佳方法是什么。

(defn logged-in-verify
[ring-handler]
(fn new-ring-handler
[request]
;;verify that the scrypt hash of email and timestamp matches.
(let [session (:session request)
email (:ph-auth-email session)
token (:ph-auth-token session)
timestamp (:ph-auth-timestamp session)]
(if (scryptgen/check (str email timestamp) token)
(do
;; return response from wrapped handler
(ring-handler request))
;; return error response
{:status 400, :body "Please sign in."}))))

由于我不检查 :session 是否已绑定(bind),因此使用此中间件的事物会在未设置时返回 NullPointerException 。最好的方法是什么?

最佳答案

使用when-let 或类似的if-let检查您是否确实有 session :

(defn logged-in-verify
[ring-handler]
(fn new-ring-handler
[request]
;;verify that the scrypt hash of email and timestamp matches.
(if-let [session (:session request)]
(let [email (:ph-auth-email session)
token (:ph-auth-token session)
timestamp (:ph-auth-timestamp session)]
(if (scryptgen/check (str email timestamp) token)
;; return response from wrapped handler
(ring-handler request))
;; return error response
{:status 400, :body "Please sign in."}))
;; do something when there is no session yet
(generate-new-session-and-redirect))))

关于clojure - 确保 var 在 Clojure 中绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28556799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com