Я использую angular и имею приложение, в котором хранятся данные пользователя и информация для входа. При попытке удалить пользователя я сначала удаляю всю информацию, связанную с пользователем. Затем попросите пользователя повторно аутентифицировать себя, после аутентификации пользователь выходит из системы, и его основные данные извлекаются, чтобы показать удаленный идентификатор профиля, а затем информацию для входа с помощью user.delete().
Все это работает, как и ожидалось, но в конце я получаю сообщение об ошибке. Почему я получаю эту ошибку, даже если я уже вышел из приложения.
Сообщение об ошибке: {code: "auth/user-token-expired", message: "The user's credential is no longer valid. The user must sign in again.", a: null}
Мой код -
deleteAccount(){
var userToDelete = firebase.auth().currentUser;
this.logout();
this.store.dispatch(UI.StartAppLoad({status:'Deleting User Details...'}));
this.userService.DeleteUser(userToDelete.uid)
.then((res)=>{
console.log(res);
}).catch(this.HandleError.bind(this));
userToDelete.delete().then(
(res)=>{
console.log(res);
this.uiService.showSnackbar('User Account Deleted',null,3000);
this.store.dispatch(UI.LoadApp());
}
).catch(this.HandleError.bind(this));
}
logout() {
this.afAuth.signOut();
}
где HandleError
используется для отображения сообщения об ошибке в закусочной.
deleteAccount()
вызывается после успешной аутентификации пользователя.
Вместо отображения сообщения об ошибке я хочу отобразить сообщение 'User Account Deleted'
.
Весь поток -
onDeleteAccount(){
const confirmResult = this.uiService.showConfirm({
isDanger:true,
title:'Delete Account?',
content:'All your user account data will be permamnently deleted.'+
' You will need to create a new account later. Are you sure you want to continue?',
okText:'Delete'
});
confirmResult.subscribe(async isDelete=>{
if(isDelete){
this.store.dispatch(UI.StartAppLoad({status:'Deleting Excercise Data...'}));
const isResetDone = await this.trainingService.resetPastExercise();
if(isResetDone){
this.store.dispatch(UI.StartAppLoad({status:'Deleting Follow list...'}));
this.userService.clearFollowList();
this.authService.actionToPerform.next(actions.Delete_Account);
this.store.dispatch(UI.LoadApp());
this.router.navigate([AppRoutes.ReAuthenticate]);
}
}
});
}
Аутентифицировать метод submit()
страницы:
this.authService.reauthenticate({
email:form.value.email,
password:form.value.password
});
this.authService.deleteAccount();
Служба авторизации:
reauthenticate(authdata: AuthData) {
this.store.dispatch(UI.StartLoading());
var credential = firebase.auth.EmailAuthProvider.credential(
authdata.email,
authdata.password
);
this.afAuth.currentUser.then((user) => {
user.reauthenticateWithCredential(credential)
.then((res)=>{
this.prevPwd = authdata.password;
console.log(res);
this.store.dispatch(UI.StopLoading());
})
.catch(this.HandleError.bind(this))
});
}
И затем вышеописанный метод deleteAccount()
Пожалуйста, предложите.