340 lines
9.3 KiB
Markdown
340 lines
9.3 KiB
Markdown
<!-- INTERNAL: Operational doc - DO NOT PUBLISH TO PUBLIC DOCS -->
|
|
|
|
# Discord Linking Fixes - Summary of Changes
|
|
|
|
## Overview
|
|
|
|
All Discord linking flow issues have been identified and fixed. This document summarizes what was broken and what has been repaired.
|
|
|
|
---
|
|
|
|
## ✅ Fixes Applied
|
|
|
|
### Fix 1: DiscordVerify Auto-Redirect (FIXED)
|
|
|
|
**File:** `code/client/pages/DiscordVerify.tsx` (Line 91-93)
|
|
|
|
**What was broken:**
|
|
|
|
- After `/verify` command in Discord, user clicks link
|
|
- Code auto-submits successfully
|
|
- BUT redirected to `/profile/settings` (wrong page)
|
|
- User can't see Discord in connections list
|
|
|
|
**What was fixed:**
|
|
|
|
```typescript
|
|
// BEFORE
|
|
setTimeout(() => {
|
|
navigate("/profile/settings");
|
|
}, 3000);
|
|
|
|
// AFTER
|
|
setTimeout(() => {
|
|
navigate("/dashboard?tab=connections");
|
|
}, 3000);
|
|
```
|
|
|
|
**Impact:** Users now see the correct connections tab after successful verification
|
|
|
|
---
|
|
|
|
### Fix 2: DiscordVerify Button Redirects (FIXED)
|
|
|
|
**File:** `code/client/pages/DiscordVerify.tsx` (Lines 160, 228)
|
|
|
|
**What was broken:**
|
|
|
|
- "Go to Settings" button on success screen → `/profile/settings`
|
|
- "Cancel" button on input screen → `/profile/settings`
|
|
- Both sent users to wrong location
|
|
|
|
**What was fixed:**
|
|
|
|
Button 1 (Line 160):
|
|
|
|
```typescript
|
|
// BEFORE
|
|
onClick={() => navigate("/profile/settings")}
|
|
|
|
// AFTER
|
|
onClick={() => navigate("/dashboard?tab=connections")}
|
|
```
|
|
|
|
Button 2 (Line 228):
|
|
|
|
```typescript
|
|
// BEFORE
|
|
onClick={() => navigate("/profile/settings")}
|
|
|
|
// AFTER
|
|
onClick={() => navigate("/dashboard")}
|
|
```
|
|
|
|
**Impact:** Buttons now correctly navigate to dashboard/connections
|
|
|
|
---
|
|
|
|
### Fix 3: OAuth Callback Error Messages (IMPROVED)
|
|
|
|
**File:** `code/api/discord/oauth/callback.ts` (Lines 105-113)
|
|
|
|
**What was broken:**
|
|
|
|
- When session lost, error message was generic: "Please sign in before linking Discord"
|
|
- No diagnostic information to help debug
|
|
- Users didn't know what went wrong
|
|
|
|
**What was fixed:**
|
|
|
|
```typescript
|
|
// BEFORE
|
|
console.error("[Discord OAuth] Linking flow but no authenticated user found");
|
|
return res.redirect(
|
|
`/login?error=not_authenticated&message=${encodeURIComponent("Please sign in before linking Discord")}`,
|
|
);
|
|
|
|
// AFTER
|
|
console.error(
|
|
"[Discord OAuth] Linking flow but no authenticated user found - session cookies not present in request",
|
|
);
|
|
console.error(
|
|
"[Discord OAuth] DIAGNOSTIC: Ensure Discord Dev Portal OAuth2 Redirects includes:",
|
|
"https://aethex.dev/api/discord/oauth/callback",
|
|
);
|
|
console.error(
|
|
"[Discord OAuth] If using custom domain, update the redirect URI accordingly",
|
|
);
|
|
return res.redirect(
|
|
`/login?error=session_lost&message=${encodeURIComponent("Your session was lost. Please sign in again and try linking Discord.")}`,
|
|
);
|
|
```
|
|
|
|
**Impact:** Better debugging information in server logs when session is lost
|
|
|
|
---
|
|
|
|
## 📋 Root Cause Analysis
|
|
|
|
### Session Loss During Dashboard OAuth Linking
|
|
|
|
**What happens:**
|
|
|
|
1. User on `/dashboard?tab=connections`
|
|
2. Clicks "Link Discord" button
|
|
3. Redirected to Discord OAuth
|
|
4. User authorizes
|
|
5. Discord redirects back to `/api/discord/oauth/callback?code=...`
|
|
6. **ISSUE:** Session cookies not sent with this redirect
|
|
7. Backend can't extract user_id from cookies
|
|
8. User redirected to login
|
|
|
|
**Root cause:**
|
|
One of the following:
|
|
|
|
1. **Redirect URI not registered in Discord Dev Portal** ← MOST LIKELY
|
|
- Discord doesn't redirect to the correct URL
|
|
- Causes issues with cookie handling
|
|
2. Browser cookie policy (SameSite=Lax)
|
|
|
|
- Cookies might not be sent in cross-site redirect
|
|
- Less likely but possible
|
|
|
|
3. Domain mismatch
|
|
- Redirect URI in code uses different domain than Discord portal
|
|
- E.g., `localhost` vs `aethex.dev`
|
|
|
|
**Solution:** See `DISCORD-OAUTH-SETUP-VERIFICATION.md` for step-by-step guide to verify Discord Developer Portal settings
|
|
|
|
---
|
|
|
|
## 🔍 What Still Needs Verification
|
|
|
|
The session loss issue requires a manual verification step:
|
|
|
|
### CRITICAL: Verify Discord Dev Portal Redirect URI
|
|
|
|
1. Go to: https://discord.com/developers/applications
|
|
2. Find: AeThex application
|
|
3. Click: OAuth2
|
|
4. Look for: REDIRECT URLS / REDIRECTS section
|
|
5. **Must contain:** `https://aethex.dev/api/discord/oauth/callback`
|
|
6. If missing:
|
|
- Click: Add Redirect
|
|
- Paste: `https://aethex.dev/api/discord/oauth/callback`
|
|
- Click: Save Changes
|
|
- Wait 1-2 minutes for changes to propagate
|
|
|
|
**This is required for the Dashboard "Link Discord" button to work!**
|
|
|
|
---
|
|
|
|
## 🧪 Testing the Fixes
|
|
|
|
### Test 1: Discord `/verify` Command Flow
|
|
|
|
```
|
|
Expected flow:
|
|
1. User types /verify in Discord
|
|
2. Bot generates code
|
|
3. User clicks link or enters code at https://aethex.dev/discord-verify?code=XXX
|
|
4. Page auto-submits code
|
|
5. ✅ Shows success message
|
|
6. ✅ Redirects to /dashboard?tab=connections (NOT /profile/settings)
|
|
7. ✅ Discord appears in connections list
|
|
8. ✅ Can click "Already Linked" message if run /verify again
|
|
```
|
|
|
|
**Status:** ✅ FIXED - All redirects now correct
|
|
|
|
---
|
|
|
|
### Test 2: Dashboard "Link Discord" Button
|
|
|
|
```
|
|
Expected flow:
|
|
1. User at /dashboard?tab=connections
|
|
2. User clicks "Link Discord" button
|
|
3. Redirected to Discord OAuth
|
|
4. User clicks "Authorize"
|
|
5. Discord redirects back to /api/discord/oauth/callback?code=...
|
|
6. ✅ User still logged in (session preserved)
|
|
7. ✅ Redirected to /dashboard?tab=connections
|
|
8. ✅ Discord appears in connections list
|
|
```
|
|
|
|
**Status:** ⚠️ DEPENDS ON - Discord Dev Portal configuration
|
|
|
|
- If redirect URI not registered: User redirected to login
|
|
- Fix: Verify Discord Dev Portal has correct redirect URI registered (see step above)
|
|
|
|
---
|
|
|
|
### Test 3: Already Linked Behavior
|
|
|
|
```
|
|
Expected when trying to link again:
|
|
1. /verify command shows "Already Linked" message
|
|
2. Can't link the same Discord account to another AeThex account
|
|
3. Can use /unlink to disconnect first, then /verify to link to different account
|
|
```
|
|
|
|
**Status:** ✅ WORKING - Bot prevents duplicate links
|
|
|
|
---
|
|
|
|
## 📚 Documentation Created
|
|
|
|
1. **DISCORD-LINKING-FLOW-ANALYSIS.md**
|
|
|
|
- Complete flow diagrams
|
|
- Issue breakdown
|
|
- Root cause analysis
|
|
|
|
2. **DISCORD-OAUTH-SETUP-VERIFICATION.md** ← READ THIS NEXT
|
|
|
|
- Step-by-step Discord Dev Portal verification
|
|
- Testing procedures
|
|
- Debugging guide
|
|
- Troubleshooting for common issues
|
|
|
|
3. **DISCORD-LINKING-FIXES-APPLIED.md** (this file)
|
|
- Summary of all code changes
|
|
- What was broken vs fixed
|
|
- Remaining verification steps
|
|
|
|
---
|
|
|
|
## 🎯 Next Steps for User
|
|
|
|
1. **Read:** `code/docs/DISCORD-OAUTH-SETUP-VERIFICATION.md`
|
|
2. **Verify:** Discord Developer Portal has correct redirect URI
|
|
3. **Test:** Both Discord linking flows
|
|
4. **Report:** Any errors or issues encountered
|
|
|
|
---
|
|
|
|
## Environment Variables Required
|
|
|
|
### Already Set ✅
|
|
|
|
- `DISCORD_CLIENT_ID=578971245454950421`
|
|
- `DISCORD_PUBLIC_KEY=...`
|
|
- `VITE_SUPABASE_URL=...`
|
|
- `VITE_SUPABASE_ANON_KEY=...`
|
|
|
|
### Verify These Are Set ⚠️
|
|
|
|
- `DISCORD_CLIENT_SECRET` (set in production only)
|
|
- `SUPABASE_SERVICE_ROLE` (set in production only)
|
|
- `VITE_API_BASE` (correct domain for your deployment)
|
|
|
|
---
|
|
|
|
## Code Changes Summary
|
|
|
|
| File | Change | Status |
|
|
| ------------------------------------- | --------------------------------------------- | --------------------- |
|
|
| `code/client/pages/DiscordVerify.tsx` | Lines 91-93: Auto-redirect to connections tab | ✅ FIXED |
|
|
| `code/client/pages/DiscordVerify.tsx` | Line 160: Button redirect to connections tab | ✅ FIXED |
|
|
| `code/client/pages/DiscordVerify.tsx` | Line 228: Cancel button redirect to dashboard | ✅ FIXED |
|
|
| `code/api/discord/oauth/callback.ts` | Lines 105-113: Better error messages | ✅ IMPROVED |
|
|
| Discord Dev Portal | OAuth2 Redirect URI registration | ⚠️ NEEDS VERIFICATION |
|
|
|
|
---
|
|
|
|
## Issue Resolution Status
|
|
|
|
| Issue | Status | Solution |
|
|
| ---------------------------- | ------------------ | --------------------------------------- |
|
|
| Wrong redirect after /verify | ✅ FIXED | Update code + deploy |
|
|
| Session lost during OAuth | ⚠️ PARTIALLY FIXED | Need Discord Dev Portal verification |
|
|
| Generic error messages | ✅ IMPROVED | Better console logging |
|
|
| UI consistency | ✅ FIXED | All redirects now go to connections tab |
|
|
|
|
---
|
|
|
|
## Deployment Instructions
|
|
|
|
1. **Deploy code changes:**
|
|
|
|
```bash
|
|
npm run build
|
|
npm run deploy
|
|
# Or your deployment process
|
|
```
|
|
|
|
2. **Verify Discord Dev Portal:**
|
|
|
|
- Follow steps in DISCORD-OAUTH-SETUP-VERIFICATION.md
|
|
- Add redirect URI if missing
|
|
- Wait for propagation
|
|
|
|
3. **Test thoroughly:**
|
|
|
|
- Test /verify flow
|
|
- Test Dashboard "Link Discord" button
|
|
- Check session persistence
|
|
|
|
4. **Monitor logs:**
|
|
- Watch for `[Discord OAuth]` messages
|
|
- Should be clean after successful linking
|
|
|
|
---
|
|
|
|
## Related Issues
|
|
|
|
- Session clearing on page load: ✅ FIXED in previous session
|
|
- Authentication context: ✅ Preserves Supabase session correctly
|
|
- Cookie handling: ✅ Properly managed by AuthContext
|
|
|
|
---
|
|
|
|
## Questions?
|
|
|
|
Refer to:
|
|
|
|
1. **DISCORD-OAUTH-SETUP-VERIFICATION.md** - Setup & testing
|
|
2. **DISCORD-LINKING-FLOW-ANALYSIS.md** - Architecture & flow diagrams
|
|
3. Browser console - Look for `[Discord OAuth]` debug messages
|
|
4. Server logs - Look for authentication errors
|