-
- Trip
- Go
-
-
Create Your Account
- {error &&
{error}
}
-
-
- Already have an account? Login
-
-
+ {showOTPVerification ? (
+
+
+ Trip
+ Go
+
+
Create Your Account
+ {error &&
{error}
}
+
+
+ Already have an account? Login
+
+
+ )}
>
);
diff --git a/src/pages/VerifyEmail.tsx b/src/pages/VerifyEmail.tsx
new file mode 100644
index 0000000..90ad61e
--- /dev/null
+++ b/src/pages/VerifyEmail.tsx
@@ -0,0 +1,84 @@
+import React, { useEffect, useState } from 'react';
+import { useNavigate } from 'react-router-dom';
+import { supabase } from '../config/supabaseClient';
+import Loader from '../components/Loader';
+import UnifiedStarBackground from '../components/UnifiedStarBackground';
+import '../styles/Login.css';
+
+const VerifyEmail: React.FC = () => {
+ const [verificationStatus, setVerificationStatus] = useState<'pending' | 'success' | 'error'>('pending');
+ const [message, setMessage] = useState('Verifying your email...');
+ const [isLoading, setIsLoading] = useState(true);
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ const handleVerification = async () => {
+ try {
+ // Get the current session
+ const { data: { session }, error: sessionError } = await supabase.auth.getSession();
+
+ if (sessionError) {
+ throw sessionError;
+ }
+
+ if (!session?.user) {
+ setVerificationStatus('error');
+ setMessage('No active session found. Please try signing up again.');
+ return;
+ }
+
+ // Update the user's profile to mark as verified
+ const { error: updateError } = await supabase
+ .from('profiles')
+ .update({ is_verified: true })
+ .eq('id', session.user.id);
+
+ if (updateError) {
+ throw updateError;
+ }
+
+ setVerificationStatus('success');
+ setMessage('Email verified successfully! Redirecting to login...');
+
+ // Redirect to login after 3 seconds
+ setTimeout(() => {
+ navigate('/login');
+ }, 3000);
+ } catch (error) {
+ console.error('Verification error:', error);
+ setVerificationStatus('error');
+ setMessage(error instanceof Error ? error.message : 'An error occurred during verification');
+ } finally {
+ setIsLoading(false);
+ }
+ };
+
+ handleVerification();
+ }, [navigate]);
+
+ return (
+
+
Welcome to TripGo!
+
Your verification code is:
+
+ ${otp}
+
+
This code will expire in 10 minutes.
+
If you didn't request this code, please ignore this email.
+
+ `,
+ })
+
+ await client.close()
+
+ return new Response(
+ JSON.stringify({ message: 'OTP sent successfully' }),
+ {
+ headers: { ...corsHeaders, 'Content-Type': 'application/json' },
+ status: 200,
+ },
+ )
+ } catch (error) {
+ return new Response(
+ JSON.stringify({ error: error.message }),
+ {
+ headers: { ...corsHeaders, 'Content-Type': 'application/json' },
+ status: 400,
+ },
+ )
+ }
+})
\ No newline at end of file