首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在luminus中编写登录函数或使用朋友?

如何在luminus中编写登录函数或使用朋友?
EN

Stack Overflow用户
提问于 2014-01-06 08:49:52
回答 2查看 1.6K关注 0票数 5

我开始使用luminus框架来开发一个web应用程序,我试图用朋友作为用户,我在这里堆叠,我不知道如何在rails应用程序中使用gem。我不知道我应该把代码放在卢米努斯,有谁可以给我演示。或者告诉我下一步该怎么做?那么,您也可以告诉我如何在luminus中编写登录函数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-26 23:34:01

下面是我做luminus+friend组合时的一个例子,当然,他们已经修改了模板好几次,所以这是来自一个较旧的版本,但是概念相同,我希望它能有所帮助。

代码语言:javascript
复制
(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))
票数 1
EN

Stack Overflow用户

发布于 2014-01-07 03:49:39

登录类的工作方式类似于在卢米努斯博士中发布。不确定您是否读到了该部分,但我将向您展示我使用的代码的简化版本。我想提到的是,我删除了相当多的代码,以使一切变得更容易理解,因此这可能无法正常工作,因为我只删除了代码和额外的父类。因为它来自实际的工作代码,所以它将与一些tweeking一起工作:

第一部分是获取登录表单:

代码语言:javascript
复制
(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”循环的简化版本:

代码语言:javascript
复制
(defroutes app-routes
  (GET "/login" []
       (log/login-page))

  (POST "/login" [username password]
        (do-login username password)))

(do-login)函数是我对用户/密码组合进行身份验证的地方,然后设置会话,如下所示。

注意,POST路由需要参数。参数必须与表单中的"name“参数匹配。

最后,要想让这一切发挥作用,你必须安排一些会议。我个人使用lib-noir.session:

代码语言:javascript
复制
(ns myapp.handler
  (:require [noir.session :as sesh])

然后,您必须创建一个映射来保存会话,我在这里包装了一个函数(注意:键必须匹配数据库中的任何内容:

代码语言:javascript
复制
(defn set-user [username]
  (sesh/put! :handle username))

最后,您必须告诉clojure,您希望允许通过中间件处理会话:

代码语言:javascript
复制
(def app
  (sesh/wrap-noir-session
    (handler/site
     app-routes)))

希望这能给你一点优势。我没有包括如何连接到数据库或如何使用地图,但以上应该足以让您在路上。我也没有提到授权和安全(请不要跳过这个!)从这里开始,使用数据库、地图或朋友并不是一个巨大的飞跃。只是想给你足够的机会让你开始工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20946162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档