Невозможно использовать Auth.userAttributes с федеративным входом - PullRequest
1 голос
/ 23 марта 2020

В моем приложении пользователям разрешено входить только через Google. Однако мне нужно отслеживать, какие пользователи считаются «администраторами» в моей системе, и позволять администраторам рекламировать других пользователей также как администраторов. Для этого у меня есть пользовательский атрибут в пуле пользователей Cognito, который называется «admin».

Однако, когда я попытался использовать Auth.userAttributes, я столкнулся с ошибкой, что он ожидает объект CognitoUser, и Auth.currentAuthenticatedUser не возвращает объект CognitoUser. После некоторого исследования похоже, что он просто возвращает все, что получает от процесса федеративного входа. Глядя на мой пул пользователей, кажется, что пользователям тоже ничего не назначают для моего пользовательского атрибута.

Я думаю, мне может понадобиться использовать лямбда-триггеры? Но какие триггеры я использую, и как я могу получить Auth.currentAuthenticatedUser для возврата объекта CognitoUser? Я думаю, что мне по крайней мере понадобится триггер, чтобы проверить, входит ли пользователь в первый раз, и установить атрибут admin на 0. Но тогда я буду использовать Auth.signIn? Кроме того, из https://github.com/aws-amplify/amplify-js/blob/a047ce73/packages/auth/src/Auth.ts#L1191, исходного кода для Auth.currentAuthenticatedUser, похоже, что он ищет только пользователя в пуле пользователей, если в кеше нет записи для 'aws -amplify -federatedInfo ', который добавляется, когда я использую Auth.federatedSignIn. Так что мне нужно очистить это?

Заранее спасибо. Любая информация или совет приветствуется.

1 Ответ

1 голос
/ 24 марта 2020

Tricky! Я согласен, это должно быть проще. Я бы оставил тайник в покое. Попробуйте обойти кеш.

import { Auth } from 'aws-amplify';

Auth.currentAuthenticatedUser({
    bypassCache: true  // If set to true, this call will send a request to Cognito to get the latest user data
}).then(user => console.log(user))
.catch(err => console.log(err));

Почему? currentAuthenticatedUser () возвращает FederatedUser , когда это несколько полезно, поскольку идеальным ответом будет CognitoUser . bypassCache изменяет ответ currentAuthenticatedUser ().

Пусть ваше приложение принесет большую радость!

...