Я хочу закодировать идентификатор пользователя AWS Cognito в действительный ObjectId, который можно использовать в MongoDB в качестве идентификатора документа, чтобы каждый пользовательский документ мог быть идентифицирован по идентификатору пользователя.
Действительный ObjectId должен быть 12-байтовым вводом или 24-символьной шестнадцатеричной строкой
Вот пример идентификатора пользователя AWS Cognito (str):
b5bb610b-de5a-480e-9363-84905ae33d23
Я пытался преобразовать идентификатор пользователя Cognito в байты, а также в шестнадцатеричные числа, но это не удовлетворяет требованию. Вот код
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)
Но я не могу декодировать его обратно. Я могу получить только первые 6 символов идентификатора Cognito по
cognito_prefix = str(mongo_id)[:6]
Будет ситуация, когда мне понадобится весь идентификатор Cognito, полученный из идентификатора объекта mongo.
Мне нужно закодировать идентификатор пользователя Cognito в действительный идентификатор объекта, который можно сохранить в mongoDB, а также декодировать его обратно.
Пожалуйста, помогите.