<<<<<<< HEAD
β Firebase + OTP Authentication Implementation Complete
All code changes have been applied successfully! Here are the next steps you need to follow:
π Implementation Summary
β Backend Changes (Completed)
- β
Updated
requirements.txtwith Firebase Admin SDK - β
Updated
models.py- User model now supports Firebase and OTP auth methods - β
Created
email_validator.py- Business email validation - β
Created
firebase_auth.py- Firebase token verification - β
Created
brevo_service.py- Brevo email service for OTP - β
Created
otp_service.py- OTP generation and verification - β
Updated
auth_routes.py- New endpoints for Firebase and OTP login
β Frontend Changes (Completed)
- β
Updated
package.jsonwith Firebase SDK - β
Created
config/firebase.js- Firebase configuration - β
Updated
services/auth.js- Firebase and OTP auth functions - β
Updated
contexts/AuthContext.jsx- Firebase and OTP support - β
Created
components/auth/LoginForm.jsx- Login UI with both options - β
Updated
App.jsx- Integrated LoginForm component
π Next Steps (YOU NEED TO DO THESE)
Step 1: Install Dependencies
Backend:
cd backend
pip install -r requirements.txt
Frontend:
cd frontend
npm install
Step 2: Set Up Firebase
Create Firebase Project:
- Go to https://console.firebase.google.com/
- Create a new project or use existing one
Enable Google Authentication:
- In Firebase Console β Authentication β Sign-in method
- Enable "Google" provider
- Set project support email
Get Web App Config:
- Project Settings β Your apps β Add Web app
- Copy the config values
Get Service Account Key:
- Project Settings β Service accounts
- Click "Generate new private key"
- Download the JSON file
Set Frontend Environment Variables: Create
frontend/.env:VITE_FIREBASE_API_KEY=your-api-key-here VITE_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com VITE_FIREBASE_PROJECT_ID=your-project-id VITE_FIREBASE_STORAGE_BUCKET=your-project.appspot.com VITE_FIREBASE_MESSAGING_SENDER_ID=your-sender-id VITE_FIREBASE_APP_ID=your-app-id VITE_API_BASE_URL=http://localhost:7860Set Backend Environment Variables: Option A (JSON file path):
FIREBASE_SERVICE_ACCOUNT_KEY=/path/to/service-account-key.jsonOption B (JSON string - recommended for Docker):
FIREBASE_SERVICE_ACCOUNT_JSON='{"type":"service_account","project_id":"...","private_key":"...","client_email":"..."}'(Copy the entire JSON content from the downloaded file)
Step 3: Set Up Brevo
Create Brevo Account:
- Go to https://www.brevo.com/
- Sign up (free tier: 300 emails/day)
Get API Key:
- Settings β API Keys
- Generate new API key
- Copy the key (starts with
xkeysib-)
Verify Sender Email:
- Senders & IP β Senders
- Add sender email (e.g.,
noreply@yourdomain.com) - Verify via email
Set Backend Environment Variables:
BREVO_API_KEY=xkeysib-your-api-key-here BREVO_SENDER_EMAIL=noreply@yourdomain.com BREVO_SENDER_NAME=EZOFIS AI
Step 4: Set JWT Secret
Generate a secure random key:
# Linux/Mac
openssl rand -hex 32
# Or Python
python -c "import secrets; print(secrets.token_hex(32))"
Set environment variable:
JWT_SECRET_KEY=your-generated-secret-key-here
Step 5: Set Frontend URL
FRONTEND_URL=http://localhost:5173 # Development
# OR
FRONTEND_URL=https://your-domain.com # Production
Step 6: Database Migration
If you have existing data:
- The new schema will be created automatically
- Existing
extractionstable needsuser_idcolumn - You may need to assign existing records to a default user
For fresh start (recommended for development):
- Delete
data/app.db(if exists) - Restart application - tables will be recreated
Step 7: Test the Implementation
Start Backend:
cd backend uvicorn app.main:app --reload --port 7860Start Frontend:
cd frontend npm run devTest Firebase Login:
- Navigate to http://localhost:5173
- Click "Google Sign In" tab
- Sign in with business Google account
- Should redirect to dashboard
Test OTP Login:
- Click "Email / OTP" tab
- Enter business email
- Click "Send OTP"
- Check email for OTP code
- Enter OTP and verify
- Should redirect to dashboard
Test Business Email Validation:
- Try personal Gmail account β Should be blocked
- Try OTP with personal email β Should be blocked
π Environment Variables Checklist
Backend (.env or system environment)
-
FIREBASE_SERVICE_ACCOUNT_JSONorFIREBASE_SERVICE_ACCOUNT_KEY -
BREVO_API_KEY -
BREVO_SENDER_EMAIL -
BREVO_SENDER_NAME -
JWT_SECRET_KEY -
FRONTEND_URL
Frontend (.env)
-
VITE_FIREBASE_API_KEY -
VITE_FIREBASE_AUTH_DOMAIN -
VITE_FIREBASE_PROJECT_ID -
VITE_FIREBASE_STORAGE_BUCKET -
VITE_FIREBASE_MESSAGING_SENDER_ID -
VITE_FIREBASE_APP_ID -
VITE_API_BASE_URL
π Security Reminders
- β Never commit API keys or secrets to git
- β
Use
.envfiles (add to.gitignore) - β Business email validation is enforced on both frontend and backend
- β JWT tokens expire after 7 days
- β OTP codes expire after 10 minutes
- β Maximum 5 OTP verification attempts
π Documentation
- Firebase Setup: See
FIREBASE_OTP_SETUP.mdfor detailed instructions - Brevo API: https://developers.brevo.com/reference/sendtransacemail
β οΈ Important Notes
Database Schema Change:
- User model changed from
google_id(required) tofirebase_uid(optional) - If you have existing users, you'll need to migrate the data
- For development, deleting
data/app.dbis the easiest option
- User model changed from
Business Email Validation:
- Personal email domains are blocked (Gmail, Yahoo, Outlook, etc.)
- Validation happens on both frontend and backend
- Users must use their work/corporate email addresses
OTP Storage:
- Currently stored in memory (works for single server)
- For production with multiple servers, consider using Redis
π You're All Set!
Once you complete the setup steps above, your application will have:
- β Firebase Google Sign-in (no OAuth credentials needed!)
- β Email/OTP authentication via Brevo
- β Business email validation
- β User-specific data isolation
- β Secure JWT token authentication
Good luck! π
=======
β Firebase + OTP Authentication Implementation Complete
All code changes have been applied successfully! Here are the next steps you need to follow:
π Implementation Summary
β Backend Changes (Completed)
- β
Updated
requirements.txtwith Firebase Admin SDK - β
Updated
models.py- User model now supports Firebase and OTP auth methods - β
Created
email_validator.py- Business email validation - β
Created
firebase_auth.py- Firebase token verification - β
Created
brevo_service.py- Brevo email service for OTP - β
Created
otp_service.py- OTP generation and verification - β
Updated
auth_routes.py- New endpoints for Firebase and OTP login
β Frontend Changes (Completed)
- β
Updated
package.jsonwith Firebase SDK - β
Created
config/firebase.js- Firebase configuration - β
Updated
services/auth.js- Firebase and OTP auth functions - β
Updated
contexts/AuthContext.jsx- Firebase and OTP support - β
Created
components/auth/LoginForm.jsx- Login UI with both options - β
Updated
App.jsx- Integrated LoginForm component
π Next Steps (YOU NEED TO DO THESE)
Step 1: Install Dependencies
Backend:
cd backend
pip install -r requirements.txt
Frontend:
cd frontend
npm install
Step 2: Set Up Firebase
Create Firebase Project:
- Go to https://console.firebase.google.com/
- Create a new project or use existing one
Enable Google Authentication:
- In Firebase Console β Authentication β Sign-in method
- Enable "Google" provider
- Set project support email
Get Web App Config:
- Project Settings β Your apps β Add Web app
- Copy the config values
Get Service Account Key:
- Project Settings β Service accounts
- Click "Generate new private key"
- Download the JSON file
Set Frontend Environment Variables: Create
frontend/.env:VITE_FIREBASE_API_KEY=your-api-key-here VITE_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com VITE_FIREBASE_PROJECT_ID=your-project-id VITE_FIREBASE_STORAGE_BUCKET=your-project.appspot.com VITE_FIREBASE_MESSAGING_SENDER_ID=your-sender-id VITE_FIREBASE_APP_ID=your-app-id VITE_API_BASE_URL=http://localhost:7860Set Backend Environment Variables: Option A (JSON file path):
FIREBASE_SERVICE_ACCOUNT_KEY=/path/to/service-account-key.jsonOption B (JSON string - recommended for Docker):
FIREBASE_SERVICE_ACCOUNT_JSON='{"type":"service_account","project_id":"...","private_key":"...","client_email":"..."}'(Copy the entire JSON content from the downloaded file)
Step 3: Set Up Brevo
Create Brevo Account:
- Go to https://www.brevo.com/
- Sign up (free tier: 300 emails/day)
Get API Key:
- Settings β API Keys
- Generate new API key
- Copy the key (starts with
xkeysib-)
Verify Sender Email:
- Senders & IP β Senders
- Add sender email (e.g.,
noreply@yourdomain.com) - Verify via email
Set Backend Environment Variables:
BREVO_API_KEY=xkeysib-your-api-key-here BREVO_SENDER_EMAIL=noreply@yourdomain.com BREVO_SENDER_NAME=EZOFIS AI
Step 4: Set JWT Secret
Generate a secure random key:
# Linux/Mac
openssl rand -hex 32
# Or Python
python -c "import secrets; print(secrets.token_hex(32))"
Set environment variable:
JWT_SECRET_KEY=your-generated-secret-key-here
Step 5: Set Frontend URL
FRONTEND_URL=http://localhost:5173 # Development
# OR
FRONTEND_URL=https://your-domain.com # Production
Step 6: Database Migration
If you have existing data:
- The new schema will be created automatically
- Existing
extractionstable needsuser_idcolumn - You may need to assign existing records to a default user
For fresh start (recommended for development):
- Delete
data/app.db(if exists) - Restart application - tables will be recreated
Step 7: Test the Implementation
Start Backend:
cd backend uvicorn app.main:app --reload --port 7860Start Frontend:
cd frontend npm run devTest Firebase Login:
- Navigate to http://localhost:5173
- Click "Google Sign In" tab
- Sign in with business Google account
- Should redirect to dashboard
Test OTP Login:
- Click "Email / OTP" tab
- Enter business email
- Click "Send OTP"
- Check email for OTP code
- Enter OTP and verify
- Should redirect to dashboard
Test Business Email Validation:
- Try personal Gmail account β Should be blocked
- Try OTP with personal email β Should be blocked
π Environment Variables Checklist
Backend (.env or system environment)
-
FIREBASE_SERVICE_ACCOUNT_JSONorFIREBASE_SERVICE_ACCOUNT_KEY -
BREVO_API_KEY -
BREVO_SENDER_EMAIL -
BREVO_SENDER_NAME -
JWT_SECRET_KEY -
FRONTEND_URL
Frontend (.env)
-
VITE_FIREBASE_API_KEY -
VITE_FIREBASE_AUTH_DOMAIN -
VITE_FIREBASE_PROJECT_ID -
VITE_FIREBASE_STORAGE_BUCKET -
VITE_FIREBASE_MESSAGING_SENDER_ID -
VITE_FIREBASE_APP_ID -
VITE_API_BASE_URL
π Security Reminders
- β Never commit API keys or secrets to git
- β
Use
.envfiles (add to.gitignore) - β Business email validation is enforced on both frontend and backend
- β JWT tokens expire after 7 days
- β OTP codes expire after 10 minutes
- β Maximum 5 OTP verification attempts
π Documentation
- Firebase Setup: See
FIREBASE_OTP_SETUP.mdfor detailed instructions - Brevo API: https://developers.brevo.com/reference/sendtransacemail
β οΈ Important Notes
Database Schema Change:
- User model changed from
google_id(required) tofirebase_uid(optional) - If you have existing users, you'll need to migrate the data
- For development, deleting
data/app.dbis the easiest option
- User model changed from
Business Email Validation:
- Personal email domains are blocked (Gmail, Yahoo, Outlook, etc.)
- Validation happens on both frontend and backend
- Users must use their work/corporate email addresses
OTP Storage:
- Currently stored in memory (works for single server)
- For production with multiple servers, consider using Redis
π You're All Set!
Once you complete the setup steps above, your application will have:
- β Firebase Google Sign-in (no OAuth credentials needed!)
- β Email/OTP authentication via Brevo
- β Business email validation
- β User-specific data isolation
- β Secure JWT token authentication
Good luck! π
daae7a900bd14d0802e4f04b99edb85493053f1d