我在Clojure中编写了一个简单的设计auth函数,它对我来说根本不是很惯用.有没有更好的方式来写这个:
(defn auth [username password]
(let [user-record (credential-fn username)]
(if (and user-record (verify-pw password))
(let [user-record (dissoc user-record :password)]
{:status 200 :body user-record})
{:status 401})))
Run Code Online (Sandbox Code Playgroud)
我认为有可能摆脱if
使用if-let
,但是if
正在做一个布尔检查,我需要绑定user-record
?卡住!
注意:dissoc
正在删除密码,user-record
因此它不会在正文中返回.
我认为你的功能最大的问题是它试图同时处理三件事:
credential-fn
和verify-pw
)(dissoc user-record password)
{:status 401}
vs. {:status 200 :body user-record}
)我会考虑将您的代码分成两个独立的函数:
(defn authenticate
[username password]
(and (verify-pw password)
(dissoc (credential-fn username) :password)))
(defn login
[username password]
(if-let [user-record (authenticate username password)]
{:status 200 :body user-record}
{:status 401}))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
184 次 |
最近记录: |