如何使用 pouchdb-authentication 检查用户名是否已经存在?
How to check if a user name already exists with pouchdb-authentication?
上下文如下。
pouchdb-authentication API doesn't offer an explicit method for this. I thought about using db.getUser(username [, opts][, callback])
。但是,此方法声明:
Note: Only server admins or the user themselves can fetch user data. Otherwise you will get a 404 not_found error.
我做的。
上下文
我想使用异步验证器来检查用户名是否存在,以便在用户单击 'submit' 之前告诉用户用户名是否存在。
我能想到的唯一其他选择是尝试注册以查明用户名是否已经存在,如下所示:
即使 PouchDB 没有这样的功能,您也可以使用 CouchDB 本身来实现它。这是带有管理员凭据的 HTTP GET 请求,returns 所有用户:
$ curl -u admin:admin -X GET http://localhost:5984/_users/_all_docs
{"total_rows":4,"offset":0,"rows":[
{"id":"_design/_auth","key":"_design/_auth","value":{"rev":"1-75efcce1f083316d622d389f3f9813f7"}},
{"id":"org.couchdb.user:admin","key":"org.couchdb.user:admin","value":{"rev":"1-c363450b879aaf64823901816b5690db"}},
{"id":"org.couchdb.user:su","key":"org.couchdb.user:su","value":{"rev":"1-c468424e1e3cc6b76baca17a9a3b7a26"}},
{"id":"org.couchdb.user:suser","key":"org.couchdb.user:suser","value":{"rev":"1-1b0c0623016feb5a5d701b392b60ad84"}}
]}
例如,在服务器端使用 NodeJS/ExressJS,您可以向 CouchDB 发送带有管理员凭据的 HTTP GET 请求并获取所有用户的列表。可以使用 node-fetch.
完成 HTTP 请求
同时,NodeJS/ExpressJS 通过 HTTP POST 请求从 front-end 接收 username
输入字段的值。在 front-end 上,您可以使用 browser fetch API.
然后可以比较username
输入框里面的值是不是用户之间的。根据比较,您可以将响应发送回 frontend/browser。 Fetch API 使用 Promise 使所有 HTTP 通信异步。
正如@BernhardGschwantner 所指出的,最好先 fetch
来自 frontend/browser 的用户名,然后通过向 CouchDB 发送 HTTP 请求来查询该用户名以查看该用户是否存在。
要向 CouchDB 发出 HTTP 请求,您可以发出 HEAD 请求,预计它比 GET 请求更快。如果用户存在,HTTP HEAD 请求 returns 200 OK
以及 ETag
内用户文档的修订如下:
$ curl -I -X HEAD http://admin:****@192.168.1.106:5984/_users/org.couchdb.user:jan
HTTP/1.1 200 OK
X-CouchDB-Body-Time: 0
X-Couch-Request-ID: fbae21471c
Server: CouchDB/2.1.1 (Erlang OTP/18)
ETag: "3-f11b227a6e1236fa502af668fdbf326d"
Date: Fri, 30 Mar 2018 08:29:55 GMT
Content-Type: application/json
Content-Length: 263
Cache-Control: must-revalidate
如果用户不存在,HTTP HEAD 请求 returns 404 Object Not Found
没有任何 ETag
,如下所示:
$ curl -I -X HEAD http://admin:****@192.168.1.106:5984/_users/org.couchdb.user:jerk
HTTP/1.1 404 Object Not Found
X-CouchDB-Body-Time: 0
X-Couch-Request-ID: ddccff4105
Server: CouchDB/2.1.1 (Erlang OTP/18)
Date: Fri, 30 Mar 2018 08:35:10 GMT
Content-Type: application/json
Content-Length: 41
Cache-Control: must-revalidate
上下文如下。
pouchdb-authentication API doesn't offer an explicit method for this. I thought about using db.getUser(username [, opts][, callback])
。但是,此方法声明:
Note: Only server admins or the user themselves can fetch user data. Otherwise you will get a 404 not_found error.
我做的。
上下文
我想使用异步验证器来检查用户名是否存在,以便在用户单击 'submit' 之前告诉用户用户名是否存在。
我能想到的唯一其他选择是尝试注册以查明用户名是否已经存在,如下所示:
即使 PouchDB 没有这样的功能,您也可以使用 CouchDB 本身来实现它。这是带有管理员凭据的 HTTP GET 请求,returns 所有用户:
$ curl -u admin:admin -X GET http://localhost:5984/_users/_all_docs
{"total_rows":4,"offset":0,"rows":[
{"id":"_design/_auth","key":"_design/_auth","value":{"rev":"1-75efcce1f083316d622d389f3f9813f7"}},
{"id":"org.couchdb.user:admin","key":"org.couchdb.user:admin","value":{"rev":"1-c363450b879aaf64823901816b5690db"}},
{"id":"org.couchdb.user:su","key":"org.couchdb.user:su","value":{"rev":"1-c468424e1e3cc6b76baca17a9a3b7a26"}},
{"id":"org.couchdb.user:suser","key":"org.couchdb.user:suser","value":{"rev":"1-1b0c0623016feb5a5d701b392b60ad84"}}
]}
例如,在服务器端使用 NodeJS/ExressJS,您可以向 CouchDB 发送带有管理员凭据的 HTTP GET 请求并获取所有用户的列表。可以使用 node-fetch.
完成 HTTP 请求同时,NodeJS/ExpressJS 通过 HTTP POST 请求从 front-end 接收 username
输入字段的值。在 front-end 上,您可以使用 browser fetch API.
然后可以比较username
输入框里面的值是不是用户之间的。根据比较,您可以将响应发送回 frontend/browser。 Fetch API 使用 Promise 使所有 HTTP 通信异步。
正如@BernhardGschwantner 所指出的,最好先 fetch
来自 frontend/browser 的用户名,然后通过向 CouchDB 发送 HTTP 请求来查询该用户名以查看该用户是否存在。
要向 CouchDB 发出 HTTP 请求,您可以发出 HEAD 请求,预计它比 GET 请求更快。如果用户存在,HTTP HEAD 请求 returns 200 OK
以及 ETag
内用户文档的修订如下:
$ curl -I -X HEAD http://admin:****@192.168.1.106:5984/_users/org.couchdb.user:jan
HTTP/1.1 200 OK
X-CouchDB-Body-Time: 0
X-Couch-Request-ID: fbae21471c
Server: CouchDB/2.1.1 (Erlang OTP/18)
ETag: "3-f11b227a6e1236fa502af668fdbf326d"
Date: Fri, 30 Mar 2018 08:29:55 GMT
Content-Type: application/json
Content-Length: 263
Cache-Control: must-revalidate
如果用户不存在,HTTP HEAD 请求 returns 404 Object Not Found
没有任何 ETag
,如下所示:
$ curl -I -X HEAD http://admin:****@192.168.1.106:5984/_users/org.couchdb.user:jerk
HTTP/1.1 404 Object Not Found
X-CouchDB-Body-Time: 0
X-Couch-Request-ID: ddccff4105
Server: CouchDB/2.1.1 (Erlang OTP/18)
Date: Fri, 30 Mar 2018 08:35:10 GMT
Content-Type: application/json
Content-Length: 41
Cache-Control: must-revalidate