2014-01-06 27 views
5

我開始使用luminus框架來開發一個web應用程序,並且我正嘗試使用朋友進行身份驗證,我在這裏堆疊,我不知道如何在rails應用程序中使用gem。 我不知道我應該把代碼放在luminus中,有沒有人可以給我演示。或者告訴我下一步該做什麼? 那麼,你也可以告訴我如何在luminus中寫入日誌功能。如何在luminus中編寫登錄功能或使用朋友?

回答

0

下面是一個例子,當我做了一個luminus +朋友組合,他們已經多次改變模板,所以這是來自舊版本,但概念相同,我希望它有幫助。

(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)) 
2

登錄排序工作就像張貼在Luminus Docs。不知道您是否設法閱讀該部分,但我會向您展示我使用的代碼的簡化版本。我想提到的是,我刪除了一些代碼,使所有內容更容易理解,所以這可能無法正常工作,因爲我只刪除了代碼和額外的parens。由於它是從實際工作的代碼,它會帶着幾分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」的方法?爲了讓路線起作用,你必須有一個「POST」路線,但你也需要一個「GET」路線。這是「GET」,「POST」循環的簡化版本,我有:

(defroutes app-routes 
    (GET "/login" [] 
     (log/login-page)) 

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

的(DO-登錄)功能,在那裏我驗證用戶/密碼組合,然後設置會話,這是如下所示。

請注意,POST路由需要參數。參數必須與表單中的「名稱」參數匹配。

最後,要完成所有工作,您必須連接一些會話。我個人使用LIB-noir.sessions:

(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))) 

Hopefu這讓你有點頭痛。我沒有包括如何連接到數據庫或如何使用地圖,但上面的內容應該足以讓您順利進行。我也沒有觸及授權和安全(請不要跳過這個!)。使用數據庫,地圖或朋友並不是一個巨大的飛躍。只是想提供足夠讓你開始。

+0

那麼,這是有幫助的我認爲,我可以使用java方式編寫,或ruby方式,我只是不在框架中的代碼如何互相交互。 –

+0

我只能說,不要過分考慮它。 – dizzystar

+0

你可以給一些演示看到完全的代碼?關於渲染一個表單,我對你的部分沒問題,我對會話部分感到困惑。我只是不明白。中間件處理會話有必要嗎? –

相關問題