Add current status document with remaining work
This commit is contained in:
142
CURRENT-STATUS.md
Normal file
142
CURRENT-STATUS.md
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
# Current Status & Remaining Work
|
||||||
|
|
||||||
|
## ✅ Completed
|
||||||
|
|
||||||
|
### 1. Code Duplication Fixed
|
||||||
|
- **Created**: `supabase/shared/email-template-renderer.ts`
|
||||||
|
- **Updated**: `send-auth-otp` imports from shared file (eliminates 260 lines of duplicate code)
|
||||||
|
- **Benefit**: Single source of truth for email master template
|
||||||
|
|
||||||
|
### 2. Unconfirmed Email Login Detection
|
||||||
|
- **Added**: `isResendOTP` state to track existing users
|
||||||
|
- **Updated**: Login error handler detects "Email not confirmed" error
|
||||||
|
- **Result**: Shows helpful message when user tries to login with unconfirmed email
|
||||||
|
|
||||||
|
## ⚠️ Remaining Work
|
||||||
|
|
||||||
|
### Issue: Unconfirmed Email User Flow
|
||||||
|
|
||||||
|
**Problem**: User registers → Closes tab → Tries to login → Gets error "Email not confirmed" → **What next?**
|
||||||
|
|
||||||
|
**Current Behavior**:
|
||||||
|
```
|
||||||
|
User tries to login → Error: "Email not confirmed"
|
||||||
|
→ Shows toast message
|
||||||
|
→ Sets isResendOTP = true
|
||||||
|
→ Shows OTP form
|
||||||
|
```
|
||||||
|
|
||||||
|
**Missing Pieces**:
|
||||||
|
1. ✅ Detection of unconfirmed email
|
||||||
|
2. ❌ **Need user_id to send OTP** (we only have email at this point)
|
||||||
|
3. ❌ **Need button to "Request OTP"** for existing users
|
||||||
|
4. ❌ **Need to fetch user_id from database** using email
|
||||||
|
|
||||||
|
### Proposed Solution
|
||||||
|
|
||||||
|
Add a new edge function or database query to get user_id by email:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// In useAuth hook
|
||||||
|
getUserIdByEmail: (email: string) => Promise<string | null>
|
||||||
|
```
|
||||||
|
|
||||||
|
Then update the auth page flow:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
if (error.message.includes('Email not confirmed')) {
|
||||||
|
// Fetch user_id from database
|
||||||
|
const userId = await getUserIdByEmail(email);
|
||||||
|
|
||||||
|
if (userId) {
|
||||||
|
setPendingUserId(userId);
|
||||||
|
setIsResendOTP(true);
|
||||||
|
setShowOTP(true);
|
||||||
|
|
||||||
|
toast({
|
||||||
|
title: 'Email Belum Dikonfirmasi',
|
||||||
|
description: 'Silakan verifikasi email Anda. Kirim ulang kode OTP?',
|
||||||
|
});
|
||||||
|
|
||||||
|
// Auto-send OTP
|
||||||
|
const result = await sendAuthOTP(userId, email);
|
||||||
|
if (result.success) {
|
||||||
|
setResendCountdown(60);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Quick Fix for Now (Manual)
|
||||||
|
|
||||||
|
For immediate testing, you can:
|
||||||
|
|
||||||
|
1. **Get user_id manually from database**:
|
||||||
|
```sql
|
||||||
|
SELECT id, email, email_confirmed_at
|
||||||
|
FROM auth.users
|
||||||
|
WHERE email = 'user@example.com';
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Test OTP with curl**:
|
||||||
|
```bash
|
||||||
|
curl -X POST https://lovable.backoffice.biz.id/functions/v1/send-auth-otp \
|
||||||
|
-H "Authorization: Bearer YOUR_SERVICE_KEY" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"user_id":"USER_ID_FROM_STEP_1","email":"user@example.com"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **User receives OTP** and can verify
|
||||||
|
|
||||||
|
## Testing Checklist
|
||||||
|
|
||||||
|
### Registration Flow ✅
|
||||||
|
- [x] Register new user
|
||||||
|
- [x] Receive OTP email with master template
|
||||||
|
- [x] Enter OTP code
|
||||||
|
- [x] Email confirmed
|
||||||
|
- [x] Can login
|
||||||
|
|
||||||
|
### Unconfirmed Email Login ⚠️
|
||||||
|
- [x] Login fails with "Email not confirmed" error
|
||||||
|
- [ ] User can request new OTP
|
||||||
|
- [ ] User receives new OTP
|
||||||
|
- [ ] User can verify and login
|
||||||
|
|
||||||
|
## Files Changed in This Session
|
||||||
|
|
||||||
|
1. **supabase/shared/email-template-renderer.ts** (NEW)
|
||||||
|
- Extracted master template from src/lib
|
||||||
|
- Can be imported by edge functions
|
||||||
|
|
||||||
|
2. **supabase/functions/send-auth-otp/index.ts**
|
||||||
|
- Removed 260 lines of duplicate EmailTemplateRenderer class
|
||||||
|
- Now imports from `../shared/email-template-renderer.ts`
|
||||||
|
|
||||||
|
3. **src/pages/auth.tsx**
|
||||||
|
- Added `isResendOTP` state
|
||||||
|
- Updated login error handler
|
||||||
|
- Shows helpful message for unconfirmed email
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
### Option 1: Quick Fix (5 minutes)
|
||||||
|
Add a "Request OTP" button that appears when login fails. User clicks button → enters email → we fetch user_id from database → send OTP.
|
||||||
|
|
||||||
|
### Option 2: Complete Solution (15 minutes)
|
||||||
|
1. Create `get-user-by-email` edge function
|
||||||
|
2. Add `getUserIdByEmail` to useAuth hook
|
||||||
|
3. Auto-send OTP on login failure
|
||||||
|
4. Show "OTP sent" message
|
||||||
|
5. User enters OTP → verified → can login
|
||||||
|
|
||||||
|
## For Now
|
||||||
|
|
||||||
|
**Users who register but don't verify email**:
|
||||||
|
- Can't login (shows error)
|
||||||
|
- Need to register again with new email OR
|
||||||
|
- Manually verify via database query
|
||||||
|
|
||||||
|
**This is acceptable for testing** but should be fixed before production use.
|
||||||
|
|
||||||
|
Would you like me to implement the complete solution now?
|
||||||
Reference in New Issue
Block a user