Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 具有朋友身份验证的Datomic无法正常工作_Clojure - Fatal编程技术网

Clojure 具有朋友身份验证的Datomic无法正常工作

Clojure 具有朋友身份验证的Datomic无法正常工作,clojure,Clojure,我正在为我的学院做一个clojure web应用程序项目,我正在尝试将datomic数据库与朋友身份验证连接起来,但有点问题…我将进一步解释 首先,我像这样做用户注册(在datomic数据库中插入用户),它正在工作 (defn insert-user [firstname lastname email password sex date] (.get (.transact conn [{

我正在为我的学院做一个clojure web应用程序项目,我正在尝试将datomic数据库与朋友身份验证连接起来,但有点问题…我将进一步解释

首先,我像这样做用户注册(在datomic数据库中插入用户),它正在工作

 (defn insert-user [firstname lastname email password sex date] (.get (.transact conn
                            [{
                           :db/id #db/id[:db.part/user -1000001]
                           :user/name firstname
                           :user/lastName lastname
                           :user/username email
                           :user/password (creds/hash-bcrypt password)
                           :user/gender sex
                           :user/birthDate date}
                         ]))

(resp/redirect "/")
)
路由处理程序和朋友身份验证器如下所示…主要功能是启动应用程序

(def page (handler/site
        (friend/authenticate
          routes

          {:allow-anon? true
           :login-uri "/login"
           :default-landing-uri "/login"
           :unauthorized-handler #(-> (html5 [:h2 "You do not have sufficient privileges to access " (:uri %)])
                                    resp/response
                                    (resp/status 401))
           :credential-fn (partial creds/bcrypt-credential-fn users)
           :workflows [(workflows/interactive-form)]})

           (wrap-keyword-params routes)
           (wrap-nested-params routes)
           (wrap-params routes)

))

(defn -main []
(run-jetty page {:port 8080 :join? false}))
最后,为用户提供datomic查询,以匹配friend的creds/bcrypt credential fn功能

(defn upit-korisnici [] 
(def temp (d/q '[:find ?u ?p
         :where [?user :user/username ?u]
                [?user :user/password ?p]
         ]
        (d/db conn)))
(def users (into {} (map (fn [[k v]] [k {:username k :password v}]) temp)))
users
)
让我感到困扰和无助的是,当我注册(插入用户)时,用户已插入datomic数据库,但当我尝试登录时,我无法登录。它显示错误的电子邮件和密码,但新用户在那里。当我重新启动整个应用程序并尝试使用新用户凭据登录时,它将通过并登录。有人知道如何解决此问题吗?

编辑:


我通过将:credential fn(部分creds/bcrypt credential fn users)更改为:credential fn#(creds/bcrypt credential fn users%)解决了这个问题。您似乎认为它会自动更新您的用户数据,但不会这样做,因为用户不是一个函数,而是普通数据。发生的是
(def user…
运行时,结果将绑定到用户名user,您没有绑定计算,因此数据永远不会更新。您对temp犯了类似的错误。查询一旦运行,结果将绑定到temp,并且永远不会重新计算。您应该将其绑定到函数,以便它重新计算值。

我开始处理UI对于具有datomic持久性的friend lib:您可以看看它,也许它已经解决了您的问题,当然您可以从中获取代码,添加pull请求/任何东西。当我有时间时,我将实现任何需要的东西

目前它支持:

  • 报名
  • 登录
  • 注销
  • 对模板的Twitter引导支持

如果我们能将所做的工作捆绑在一起,那就太好了,因为这将是许多人将来需要的东西。

temp和用户确实会更新,当我添加新用户时,它会随之更新,但在我重新启动应用程序之前它不会登录…我像你说的那样尝试将temp和用户转换为函数,但这是相同的错误。重新运行def to changee users的值没有看到friend看到的用户,这与调用friend/authenticate时看到的值一起传递。如果用户需要可变,您应该创建一个函数,知道如何检查更新的用户并将其提供给friend(可能通过atom或db调用包装).更改var绑定确实不是这样做的。我真的不明白,你能给我举个例子吗?