2015-06-03 91 views
0

我想在Clojure中使用friend進行API的基本認證。Clojure中的基本http認證/朋友

這裏的登錄請求:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'user=myuser%40email.com&pass=super-secret-password' http://localhost:3000/login/ 

我使用的Compojure爲好,但我不知道如何再利用鏈接的例子。以下是我不知道如何更改的部分:

  • 如何將我的捲髮請求中的用戶名/密碼字段替換爲用戶名/密碼字段?我能夠從原始請求中提取它們,但我不知道如何將其傳遞給Friend(我是否需要更改credential-fn?)。

  • 用來自數據庫的數據替換user atom。我有一個auth [email password]返回true或false(從數據庫中提取並使用bcrypt)。我也可以從數據庫中獲取用戶角色。我如何使用數據庫(特別是我使用mongo/monger)而不是用戶原子?

+0

關於替換用戶原子的第二部分在自己的問題中可能會更好。 –

+0

@DanielCompton我已經有了一個從數據庫中獲取數據的函數,所以我唯一的擔心就是關於朋友的猜測。你不同意嗎? – nha

+1

您可能會發現這個小骨架有幫助,我將這位朋友分享給Liberator,我使用了內存中的模擬用戶數據庫。 https://github.com/jaimeagudo/liberator-friend。不要錯過[post](https://sritchie.github.io/2014/01/17/api-authentication-with-liberator-and-friend/):) –

回答

1

你可以提供一個完全不同的憑據-FN,還是堅持到證書-FN使用cemerick.friend.credentials實現演示/ bcrypt-憑證-FN。閱讀文檔bcrypt-credential-fn在,這是相當長的。它期望一個load-credentials-fn加載給定用戶名字符串的用戶,然後檢查密碼是否匹配。在演示中,load-credentials-fn是用戶原子中的映射,但是如果您有數據庫,則希望提供不同的load-credentials-fn函數來查找數據庫,而不希望在原子中的地圖中加載您的用戶表。

+0

謝謝。因此,如果我製作一個返回地圖的自定義函數,地圖內應該包含什麼內容? – nha

+1

這個函數的結果是認證對象,也就是說,如果你從應用中調用cemerick.firend/current-authentication將會返回什麼(例如,用戶名顯示一個問候),例如:{:name「John」 :角色#{:admin:user}:shoe-size 42}。不知道是否沒有關於我在這裏想念的角色的一些細節。 –