【问题标题】:basic http auth in Clojure/FriendClojure/Friend 中的基本 http 身份验证
【发布时间】:2015-06-03 08:16:47
【问题描述】:

我正在尝试使用 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 请求中的用户/密码字段替换用户名/密码字段?我能够从原始请求中提取它们,但我不知道如何将其传递给 Friend(我需要更改 credential-fn 吗?)。

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

【问题讨论】:

  • 您关于替换用户原子的第二部分可能会在它自己的问题中更好。
  • @DanielCompton 我已经有一个从数据库中获取数据的函数,所以我唯一关心的是朋友我猜。你不同意吗?
  • 你可能会发现我分享的这个小骨架很有帮助,我在 Liberator 上使用了一个内存模拟用户数据库来集成朋友。 github.com/jaimeagudo/liberator-friend。不要错过post :)
  • @JamesSharp 谢谢我看看。

标签: clojure basic-authentication compojure


【解决方案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 是用户原子中的一个映射,但是如果您有一个数据库,您可能希望提供一个不同的 load-credentials-fn 函数来查找数据库,您不想在 atom 中的地图中加载您的用户表。

【讨论】:

  • 谢谢。因此,如果我创建一个返回地图的自定义函数,地图中应该包含什么?
  • 此函数的结果是身份验证对象,即如果您从应用程序调用 cemerick.firend/current-authentication 将返回的内容(例如,使用用户名呈现问候语),例如: {:name "John" :roles #{:admin :user} :shoe-size 42}。不确定是否没有关于我在这里错过的角色的一些详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 2011-11-12
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多