Когда я регистрирую нового пользователя, я сразу настраиваю некоторые значения для управления доступом пользователя.
Проблема в том, что данные, которые я настраиваю, отображаются только в следующих сеансах после того, как вы вошли в систему.вне сеанса аутентифицированного пользователя после того, как вы его создали.
Так что моя проблема в том, что я не могу получить претензии после того, как создал учетную запись и затем определил ее, мне нужны эти данные вскоре после создания нового пользователя.в Firebase Authentication.
auth.service.ts
public user: any;
public firestoreCollection: string;
public admin: boolean;
constructor(private _angularFireauth: AngularFireAuth) {
this.getUser().subscribe((user: firebase.User) => {
this.user = user;
if (this.user) {
// You must logout() and then login() to get the claims.
user.getIdTokenResult().then(idTokenResult => {
this.firestoreCollection = idTokenResult.claims.firestoreCollection;
this.admin = idTokenResult.claims.admin;
});
}
});
}
public getUser(): Observable<firebase.User> {
return this._angularFireauth.authState;
}
public async createAccount(user: any): Promise<void> {
const auth = await this._angularFireauth.auth
.createUserWithEmailAndPassword(user.email, user.password);
const userObject = {
displayName: user.nome.trim(),
photoURL: 'assets/images/avatars/profile.jpg'
};
await auth.user.updateProfile(userObject);
const setUserControlAccess = firebase.functions()
.httpsCallable('setUserControlAccess');
await setUserControlAccess({
admin: true, assinante: true, profissional: true,
firestoreCollection: auth.user.uid,
email: auth.user.email
});
// I tried to re-authenticate to see if I could get claims.
await this.reauthenticateUser(user.email, user.password);
}
Облачные функции
export const setUserControlAccess = functions.https.onCall(async (data, context) => {
try {
const customUserClaims = {
admin: data.admin,
firestoreCollection: data.firestoreCollection
};
const user = await admin.auth().getUserByEmail(data.email);
await authentication.setCustomUserClaims(user.uid, customUserClaims);
} catch (error) {
console.error(error);
return error;
}
});