【发布时间】:2019-11-16 18:12:40
【问题描述】:
我想将 AWS Cognito 用户 ID 编码为一个有效的 ObjectId,该 ObjectId 可以在 MongoDB 中用作文档 ID,以便每个用户的文档都可以通过用户的用户 ID 来识别。
有效的 ObjectId 必须是 12 字节的输入或 24 字符的十六进制字符串
这是一个示例 AWS Cognito 用户 ID(字符串):
b5bb610b-de5a-480e-9363-84905ae33d23
我尝试将 Cognito 用户 ID 转换为字节和十六进制,但它不满足要求。这是代码
import bson
u = "b5bb610b-de5a-480e-9363-84905ae33d23"
bson.ObjectId(u.encode("utf-8"))
bson.ObjectId(u.encode("utf-8").hex())
如果使用sha224如下图,
from hashlib import sha224
from bson.objectid import ObjectId
hasher = sha224()
cognito_id = cognito_id.encode("utf-8")
prefix = cognito_id[:6]
hasher.update(cognito_id)
hashed = hasher.digest()
partial_hash = hashed[:9]
mongo_id = prefix+partial_hash
mongo_id = ObjectId(str(mongo_id))
他们都抛出提到上述要求的错误。
使用十六进制字符串进行编码工作,
from hashlib import sha224
from bson.objectid import ObjectId
hasher = sha224()
cognito_id = cognito_id.encode("utf-8")
prefix = cognito_id.hex()[:6]
hasher.update(cognito_id)
hashed = hasher.hexdigest()[:18]
mongo_id = prefix + hashed
mongo_id = ObjectId(mongo_id)
但我无法将其解码回来。我只能通过
获取 Cognito Id 的前 6 个字符cognito_prefix = str(mongo_id)[:6]
在某些情况下,我需要从 mongo 对象 ID 派生的整个 Cognito ID。
我需要将 Cognito 用户 ID 编码为可以存储在 mongoDB 中的有效对象 ID,并将其解码回来。
请帮忙。
【问题讨论】:
标签: python-3.x mongodb amazon-cognito