UserContext, deleteAccount: if provider is google, use reauthenticateWithPopup to reauthenticate user

This commit is contained in:
gianantoniopini
2021-04-26 15:26:02 +02:00
parent f53e34c37d
commit b5d4d54ad3
2 changed files with 39 additions and 6 deletions

View File

@ -46,7 +46,7 @@ const Settings = ({ id }) => {
try {
await deleteAccount();
} catch (error) {
toast.error('An error occurred deleting your account');
toast.error('An error occurred deleting your account.');
setDeleteText(t('builder.settings.dangerZone.button'));
}
};

View File

@ -73,22 +73,55 @@ const UserProvider = ({ children }) => {
navigate('/');
};
const deleteAccount = async () => {
const reauthenticateWithGoogle = async () => {
const { currentUser } = firebase.auth();
const provider = new firebase.auth.GoogleAuthProvider();
try {
const userCredential = await currentUser.reauthenticateWithPopup(
provider,
);
return userCredential;
} catch (error) {
toast.error(error.message);
throw error;
}
};
const reauthenticate = async () => {
const { currentUser } = firebase.auth();
if (currentUser.isAnonymous) {
return;
}
const googleAuthProvider = new firebase.auth.GoogleAuthProvider();
const authProviderIsGoogle =
currentUser.providerData &&
currentUser.providerData.length > 0 &&
currentUser.providerData[0].providerId === 'google.com';
const deleteUser = firebase.functions().httpsCallable('deleteUser');
currentUser.providerData[0].providerId === googleAuthProvider.providerId;
if (authProviderIsGoogle) {
const userCredential = await loginWithGoogle();
await currentUser.reauthenticateWithCredential(userCredential.credential);
await reauthenticateWithGoogle();
} else {
const errorMessage = 'Unable to determine reauthentication method.';
toast.error(errorMessage);
throw new Error(errorMessage);
}
};
const deleteAccount = async () => {
const { currentUser } = firebase.auth();
const deleteUser = firebase.functions().httpsCallable('deleteUser');
await reauthenticate();
await deleteUser();
try {
await currentUser.delete();
} catch (error) {
toast.error(error.message);
} finally {
logout();
toast(