Извлечь претензии из ngx-auth-firebaseui - PullRequest
0 голосов
/ 21 февраля 2020

Я использую ngx-auth-firebaseui для входа на firebase. Мое приложение имеет некоторые ограниченные области, где у пользователя должны быть какие-то претензии на доступ, одна из этих претензий - претензия 'admin'.

Часть моего кода выглядит следующим образом:

constructor(
        private auth: AuthProcessService,
        private formService: SignInFormService,
        private angularFireAuth: AngularFireAuth

      ) {}

        async signIn() {
            this.active = true;

            const credentials: ICredentials = this.form.value;
            const provider = AuthProvider.EmailAndPassword;

            await this.auth.signInWith(provider, credentials);
          }

          private async setup_signedInEvent() {
            const fireAuthToken: auth.IdTokenResult = await this.angularFireAuth.idTokenResult
              .pipe(take(1))
              .toPromise();

            this.auth.onSuccessEmitter.pipe(takeWhile(_ => this.active)).subscribe(
              async user => {
                const isUserVerified = user.emailVerified;
                const token = await user.ra; //this variable holds the user token;
                const verified = user.emailVerified;
                const claims = {
                  admin: fireAuthToken ? fireAuthToken.claims.admin : null
                };..... not relevant after this

Проблема заключается в том, что при первой попытке пользователя войти в приложение в новом браузере объект утверждений всегда имеет значение null, даже если у пользователя есть утверждения. Нажатие F5 перезагружает токен пользователя и затем находит утверждения.

Я заметил, что ngx-auth-firebaseui делает вызов www.googleapis.com/identitytoolkit/v3/relyingparty/getAccountInfo?key= 'KEY', а ответ json несет нужную мне информацию. Этот вызов обрабатывается перед указанным выше кодом, когда я звоню:

this.auth.signInWith(provider, credentials);

Ответ:

{
  "kind": "identitytoolkit#GetAccountInfoResponse",
  "users": [
    {
      "localId": "XXXXXXXX",
      "email": "email@email.com",
      "displayName": "Estevao Santiago",
      "passwordHash": "HASG",
      "emailVerified": true,
      "passwordUpdatedAt": 00000000000,
      "providerUserInfo": [
        {
          "providerId": "password",
          "displayName": "Estevao Santiago",
          "federatedId": "email@email.com",
          "email": "email@email.com",
          "rawId": "email@email.com"
        }
      ],
      "validSince": "00000000",
      "disabled": false,
      "lastLoginAt": "00000000",
      "createdAt": "00000000",
      "customAttributes": "{\"admin\":true}",
      "lastRefreshAt": "2020-02-20T21:19:22.397Z"
    }
  ]
}

Таким образом, я вижу свои претензии администратора на customAttributes, но Я не нашел способа получить эту информацию от auth: AuthProcessService. Как абстракция, у меня есть доступ почти ко всему, например, this.auth.afa.currentUser.getIdTokenResult(), но это возвращает мне объект с множеством минимизированных атрибутов, из которого я не смог найти пользовательские атрибуты, которые я знаю, где уже запрашивал.

У кого-нибудь есть какие-либо предложения о том, как мне получить свои пользовательские претензии?

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