gpt4 book ai didi

couchdb - 如何在 CouchDB 中检查可用性和保留用户名

转载 作者:行者123 更新时间:2023-12-03 17:20:31 25 4
gpt4 key购买 nike

我有一个注册页面,要求用户输入用户名和电子邮件地址。

我需要检查用户名+电子邮件是否可用。如何仅使用一个 HTTP 请求来执行此操作?

顺便说一句,用户名用作 docID。

我现在正在做的是检查 docID 是否存在,然后使用 View 检查电子邮件地址的可用性,但这是 2 个 HTTP 请求。

我想过使用 View 来发出 [ username, email ] 作为键,并使用“key” param = [ username, email ] 查询 View 。但是如果用户名和电子邮件属于不同的现有用户,这将不起作用。

最佳答案

杰森。 Sam 的解决方案非常有用,但是正如您所说,它可能不适合您。我可以想到另外两种选择。

假装您又回到了 SQL 中。什么是用户的主键?它既不是用户名也不是电子邮件,而是两列。 CouchDB 也是如此。

因此,要绝对保证唯一性,答案很简单:它必须是文档 _id .例如,对于电子邮件为“jason@gmail.com”的用户“jason”,发布此文档:

{ "_id": "jason:jason@gmail.com",
"other stuff": "blah blah blah"
}

那是原子的、事务性的用户创建。它可以:
  • 成功,现在您有了新的用户文档
  • 失败,因为该 ID 已经存在并且您(故意)忘记了 _rev属性(property)。太好了,那个用户/电子邮件组合已经被占用了!

  • 当然,要简单地检查名称是否可用,您可以 GET /db/jason:jason@gmail.com . (你可以像 _users 数据库那样给 id 加上前缀,比如 users:jason:jason@gmail.com ——这取决于你。)然后你可以 POST它稍后回来。有可能同时被采用,但这在所有“先检查,后保留”的表格中都是正常的,这些表格现在在网络上很常见。

    第二个想法更只是仔细考虑你的情况。你说两个用户可以有相同的用户名 电子邮件。这听起来很奇怪。也许我读错了。这里有一些事情需要考虑:
  • 几乎没有人与其他人共享电子邮件帐户。为什么不把它作为实际的登录名呢?这对 Facebook 来说已经足够好了。那么“用户名”可以只是系统内用户的昵称或句柄,只是用户文档中的一个属性。
  • 两个 HTTP 请求可能还不错。我是这样想的:
  • 如果这是一个 3 层架构(专用 web 服务器,couchdb 后端),那么两个 HTTP 请求没什么大不了的
  • 如果是 2 层或混合(浏览器直接访问 couchdb),那么强烈考虑使用 CouchDB 进行身份验证,如 CouchDB book 中所述。 . CouchDB 可以使用表单或 AJAX 为您处理登录。它并不适用于所有情况,但您会获得巨大的物有所值。
  • 关于couchdb - 如何在 CouchDB 中检查可用性和保留用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3183975/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com