我开始使用luminus框架来开发一个web应用程序,我试图用朋友作为用户,我在这里堆叠,我不知道如何在rails应用程序中使用gem。我不知道我应该把代码放在卢米努斯,有谁可以给我演示。或者告诉我下一步该怎么做?那么,您也可以告诉我如何在luminus中编写登录函数。
发布于 2014-02-26 23:34:01
下面是我做luminus+friend组合时的一个例子,当然,他们已经修改了模板好几次,所以这是来自一个较旧的版本,但是概念相同,我希望它能有所帮助。
(def all-routes
[home-routes cljs-routes test-routes app-routes])
(def app
(-> all-routes middleware/app-handler ))
(def secured-app
(handler/site
(friend/authenticate app{
:login-uri "/login"
:unauthorized-redirect-uri "/login"
:credential-fn (partial creds/bcrypt-credential-fn users)
:workflows [(workflows/interactive-form)]})))
(def war-handler
(middleware/war-handler secured-app))发布于 2014-01-07 03:49:39
登录类的工作方式类似于在卢米努斯博士中发布。不确定您是否读到了该部分,但我将向您展示我使用的代码的简化版本。我想提到的是,我删除了相当多的代码,以使一切变得更容易理解,因此这可能无法正常工作,因为我只删除了代码和额外的父类。因为它来自实际的工作代码,所以它将与一些tweeking一起工作:
第一部分是获取登录表单:
(defn login-page []
(html5
[:h3 "Login"]
[:form {:method "POST" :action "login"}
[:div "Username:"
[:input {:type "text" :name "username" :required "required"}]]
[:div "Password:"
[:input {:type "password" :name "password" :required "required"}]]
[:div
[:input {:type "submit" :value "Log In"}]]]]))注意到有一个"POST“方法吗?为了使路线工作,你必须有一个“后”路线,但你也将需要一个“获取”路线。这是我拥有的"GET“"POST”循环的简化版本:
(defroutes app-routes
(GET "/login" []
(log/login-page))
(POST "/login" [username password]
(do-login username password)))(do-login)函数是我对用户/密码组合进行身份验证的地方,然后设置会话,如下所示。
注意,POST路由需要参数。参数必须与表单中的"name“参数匹配。
最后,要想让这一切发挥作用,你必须安排一些会议。我个人使用lib-noir.session:
(ns myapp.handler
(:require [noir.session :as sesh])然后,您必须创建一个映射来保存会话,我在这里包装了一个函数(注意:键必须匹配数据库中的任何内容:
(defn set-user [username]
(sesh/put! :handle username))最后,您必须告诉clojure,您希望允许通过中间件处理会话:
(def app
(sesh/wrap-noir-session
(handler/site
app-routes)))希望这能给你一点优势。我没有包括如何连接到数据库或如何使用地图,但以上应该足以让您在路上。我也没有提到授权和安全(请不要跳过这个!)从这里开始,使用数据库、地图或朋友并不是一个巨大的飞跃。只是想给你足够的机会让你开始工作。
https://stackoverflow.com/questions/20946162
复制相似问题