Я использую 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()
, но это возвращает мне объект с множеством минимизированных атрибутов, из которого я не смог найти пользовательские атрибуты, которые я знаю, где уже запрашивал.
У кого-нибудь есть какие-либо предложения о том, как мне получить свои пользовательские претензии?