Clojure / Friend中的基本http auth

时间:2015-06-03 08:16:47

标签: clojure basic-authentication compojure

我正在尝试使用friend在Clojure中为API创建基本身份验证。

以下是登录请求:

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,但我不确定如何重用链接的示例。以下是我不知道如何改变的部分:

  • 如何将用户名/密码字段替换为我的curl请求中的用户/密码字段?我可以从原始请求中提取它们,但我不知道如何将其传递给朋友(我是否需要更改credential-fn?)。

  • user atom替换为数据库中的数据。我有auth [email password]返回true或false(从数据库中获取并使用bcrypt)。我也可以从数据库中获取用户角色。我如何使用数据库(特别是我使用mongo / monger)而不是用户原子?

1 个答案:

答案 0 :(得分:1)

您可以提供完全不同的 credential-fn ,或坚持使用 cemerick.friend.credentials / bcrypt-实现 credential-fn 的演示凭证-FN 。在https://github.com/cemerick/friend/blob/master/src/cemerick/friend/credentials.clj阅读 bcrypt-credential-fn 的文档,这很长。它期望 load-credentials-fn 加载给定用户名字符串的用户,然后检查密码是否匹配。在演示中, load-credentials-fn 是users atom中的一个映射,但是如果你有一个数据库,你可能想要提供一个不同的load-credentials-fn函数来查找数据库,你不想在原子地图中加载你的用户表。