Является ли пользовательский атрибут в пуле пользователей 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, гораздо менее ограничивающий.