Skip to content

Commit 8cc4faf

Browse files
authored
fix(stripe-checkout): handle existing email in checkout (#1125)
1 parent c5a2828 commit 8cc4faf

File tree

1 file changed

+34
-25
lines changed
  • website/src/app/[lang]/[region]/(blue-theme)/donate/success/stripe/[session]

1 file changed

+34
-25
lines changed

website/src/app/[lang]/[region]/(blue-theme)/donate/success/stripe/[session]/success-form.tsx

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
SelectTrigger,
2525
SelectValue,
2626
} from '@socialincome/ui';
27+
import { FirebaseError } from 'firebase/app';
2728
import { createUserWithEmailAndPassword } from 'firebase/auth';
2829
import { useRouter } from 'next/navigation';
2930
import { useState } from 'react';
@@ -104,33 +105,41 @@ export function SuccessForm({
104105
setSubmitting(true);
105106

106107
try {
107-
createUserWithEmailAndPassword(auth, values.email, await rndString(16)).then(({ user }) => {
108-
const data: UpdateUserData = {
109-
stripeCheckoutSessionId: stripeCheckoutSessionId,
110-
user: {
111-
auth_user_id: user.uid,
112-
email: values.email,
113-
language: lang,
114-
personal: {
115-
name: values.firstname,
116-
lastname: values.lastname,
117-
gender: values.gender,
118-
referral: values.referral,
119-
},
120-
address: {
121-
country: values.country,
122-
},
108+
const { user } = await createUserWithEmailAndPassword(auth, values.email, await rndString(16));
109+
const data: UpdateUserData = {
110+
stripeCheckoutSessionId: stripeCheckoutSessionId,
111+
user: {
112+
auth_user_id: user.uid,
113+
email: values.email,
114+
language: lang,
115+
personal: {
116+
name: values.firstname,
117+
lastname: values.lastname,
118+
gender: values.gender,
119+
referral: values.referral,
123120
},
124-
};
125-
fetch('/api/user/update', { method: 'POST', body: JSON.stringify(data) }).then((response) => {
126-
if (!response.ok) {
121+
address: {
122+
country: values.country,
123+
},
124+
},
125+
};
126+
const response = await fetch('/api/user/update', { method: 'POST', body: JSON.stringify(data) });
127+
if (!response.ok) {
128+
toast.error(translations.updateUserError);
129+
}
130+
router.push(onSuccessURL);
131+
} catch (error: unknown) {
132+
if (error instanceof FirebaseError) {
133+
switch (error.code) {
134+
case 'auth/email-already-in-use':
135+
router.push('/login');
136+
break;
137+
default:
127138
toast.error(translations.updateUserError);
128-
}
129-
router.push(onSuccessURL);
130-
});
131-
});
132-
} catch (error) {
133-
toast.error(translations.updateUserError);
139+
break;
140+
}
141+
}
142+
134143
setSubmitting(false);
135144
}
136145
};

0 commit comments

Comments
 (0)