mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-10 12:32:28 +10:00
UserContext, deleteAccount: if provider is google, use reauthenticateWithPopup to reauthenticate user
This commit is contained in:
@ -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'));
|
||||
}
|
||||
};
|
||||
|
||||
@ -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(
|
||||
|
||||
Reference in New Issue
Block a user