Является ли пользовательский атрибут в пуле пользователей Cognito подходящим местом для хранения динамической пользовательской информации?

Документация Cognito по AWS гласит:

Каждый пользовательский атрибут: не может быть удален или изменен после добавления в пул пользователей.

От: https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html

Я считаю, что они ссылаются на имя пользовательского атрибута, а не на само значение.

Таким образом, значение можно изменить, например, из лямбда-функции. Допустим, мы храним очки верности для каждого пользователя на нашем сайте электронной коммерции.

Является ли пользовательский атрибут подходящим местом для хранения такого рода информации? Или я должен создать новую таблицу DynamoDB, связанную с UserId в пуле пользователей?

2 ответа

Решение

Вы, безусловно, можете хранить эту информацию в пользовательском атрибуте Cognito. Если бы вы сделали это, я бы рассмотрел две вещи:

1) Убедитесь, что клиент пула пользователей Cognito, который используется для аутентификации в пуле пользователей, не имеет разрешения на запись в этот атрибут. В противном случае мошенник может написать код для аутентификации в пуле пользователей и получить столько очков верности, сколько он пожелает. Поэтому вы можете захотеть скрыть обновление настраиваемого атрибута за службой.

2) В зависимости от того, как часто вам нужно обновлять этот атрибут, и вашего общего шаблона использования Cognito, вы можете столкнуться с ошибками RequestLimitExceeded при использовании API Cognito updateAttributes. Почти каждый раз, когда я пытался использовать Cognito в качестве основного хранилища данных для пользовательской информации, меня удушали. Поддержка AWS расширит ваши возможности, но ошибка происходит без предупреждения, что не очень хорошо в производственной среде. Я неизменно в конечном итоге просто по умолчанию в таблице DynamoDB. Конечно, это был мой опыт, так что YMMV

на мой взгляд, если вам нужно, чтобы значение атрибута отображалось в токене удостоверения, вы должны использовать настраиваемый атрибут, если нет, лучше сохранить его в другом месте.

Пример: у вас есть «пользователи», которые являются администраторами «страниц», затем вы сохраняете эти отношения в пользовательском атрибуте. Cognito добавляет эту информацию в Identity Token, а затем, когда пользователь делает вызов API к «страницам», вам нужно только доверять информации в токене, а не делать дополнительный вызов базы данных, чтобы проверить, связан ли пользователь с этой страницей.

Пользовательские атрибуты очень ограничены, как говорится в документации:

Вы можете добавить до 50 настраиваемых атрибутов в свой пользовательский пул. Вы можете указать минимальную и/или максимальную длину для пользовательских атрибутов. Однако максимальная длина любого пользовательского атрибута не может превышать 2048 символов.

Каждый настраиваемый атрибут:

Может быть определен как строка или число.

Не может быть обязательным.

Невозможно удалить или изменить после добавления в пул пользователей.

Может иметь имя с длиной символа, не превышающей предел, принятый Amazon Cognito. Дополнительные сведения см. в разделе Квоты в Amazon Cognito.

Если вам не нужен атрибут на токене, я предпочитаю использовать dynameDB, гораздо менее ограничивающий.

Другие вопросы по тегам