11 KiB
Dedicated Auth Pages - Complete Implementation
Overview
Instead of a modal popup, the application now has dedicated professional sign-in and sign-up pages. This solves the browser popup-blocker issue and provides a better user experience.
✅ What Was Implemented
1. Professional Sign-In Page
Location: /app/signin/page.tsx
URL: http://localhost:3001/signin
Features:
- Modern split layout (form on left, gradient background on right)
- Email/password authentication
- OAuth buttons (Google, GitHub, Facebook, Discord)
- "Forgot password?" link
- Link to sign-up page
- Redirect parameter support for post-login navigation
Design:
- Professional gradient backgrounds
- Rounded corners and shadows
- Dark mode support
- Responsive (stacks on mobile)
2. Professional Sign-Up Page
Location: /app/signup/page.tsx
URL: http://localhost:3001/signup
Features:
- Split layout design matching sign-in
- Form fields: First Name, Last Name, Email, Password, Confirm Password
- Real-time password strength validation (8-20 chars, uppercase, number, no spaces)
- OAuth buttons for quick registration
- Link to sign-in page
- Redirect parameter support
Design:
- Matches sign-in page aesthetic
- Cyan gradient on right side
- Password strength indicator with checkmarks
- Mobile responsive
3. Navigation Updated
File: components/Navbar.tsx
Changes:
- "Sign In" button now links to
/signin - "Get Started" button now links to
/signup - Removed AuthModal import (no longer needed)
- Cleaner component without modal state
4. OAuth Callback Handler
Location: /app/auth-callback/page.tsx
Purpose:
- Receives OAuth callback from OAuth providers
- Checks if user is authenticated
- Redirects to specified URL or
/account/webinars - Handles errors gracefully
Flow:
OAuth Provider → /auth/google/callback → /auth-callback → User Dashboard
(with redirect param)
5. OAuth Callback Routes Updated
Files:
app/auth/google/callback/route.tsapp/auth/github/callback/route.tsapp/auth/facebook/callback/route.tsapp/auth/discord/callback/route.ts
Changes:
- All now support
redirectquery parameter - Pass redirect URL through to callback page
- Proper error handling
🔄 OAuth Redirect Flow
Email/Password Sign-In
1. User visits /signin
2. Enters email & password
3. Clicks "Sign In"
4. /api/auth/login processes credentials
5. Redirects to /account/webinars (or custom redirect URL)
OAuth Sign-In
1. User visits /signin
2. Clicks "Continue with Google" button
3. Redirects to /api/auth/google
4. BetterAuth redirects to Google login
5. Google redirects back to /auth/google/callback?code=...&redirect=/account/webinars
6. Route handler processes OAuth
7. Redirects to /auth-callback?redirect=/account/webinars
8. Auth callback page checks session
9. Redirects to /account/webinars
Email/Password Sign-Up
1. User visits /signup
2. Fills form (first name, last name, email, password)
3. Password strength validation happens in real-time
4. Clicks "Sign Up"
5. /api/auth/register creates account
6. Redirects to /account/webinars (or custom redirect URL)
OAuth Sign-Up
1. User visits /signup
2. Clicks "Continue with Google" button
3. Same OAuth flow as sign-in
4. First-time user automatically created in database
5. Redirects to /account/webinars
🔗 Custom Redirect URLs
How to Use Redirect Parameter
Sign-In with Redirect:
http://localhost:3001/signin?redirect=/account/settings
Sign-Up with Redirect:
http://localhost:3001/signup?redirect=/webinars
The redirect parameter is:
- Extracted from URL query params
- Defaults to
/account/webinarsif not specified - Passed through entire OAuth flow
- Used to redirect after authentication
Example Use Cases
# Redirect to specific webinar after signup
/signup?redirect=/webinars/123
# Redirect to settings after signin
/signin?redirect=/account/settings
# Redirect to admin dashboard
/signin?redirect=/admin
# Default (no redirect param)
/signin → /account/webinars
📱 Browser Popup Blocker Solution
Old Approach (Modal):
- AuthModal was a popup/modal on same page
- Browsers didn't block it
- But modern apps prefer dedicated pages
- Users expected full-page auth experience
New Approach (Dedicated Pages):
- ✅ No popup blocking issues
- ✅ Full-page experience
- ✅ Better mobile experience
- ✅ SEO-friendly URLs
- ✅ Shareable auth links
- ✅ Standard web practice
🎨 Design Features
Sign-In Page
- Left: White form area (light) / Slate 900 (dark)
- Right: Gradient background (blue → purple)
- Split layout on large screens, stacks on mobile
Sign-Up Page
- Left: White form area (light) / Slate 900 (dark)
- Right: Gradient background (cyan → purple)
- Grid layout for first/last name inputs
- Password strength indicator with real-time feedback
Colors
- Primary buttons: Blue (#2563EB)
- OAuth buttons: Provider brand colors
- Backgrounds: White/Slate with gradients
- Dark mode: Slate 800/900 backgrounds
Responsive
- Mobile: Full-width form, background hidden
- Tablet: Split starts
- Desktop: Full split layout with background
📝 File Changes Summary
Created Files
| File | Purpose |
|---|---|
app/signin/page.tsx |
Professional sign-in page |
app/signup/page.tsx |
Professional sign-up page |
app/auth-callback/page.tsx |
OAuth callback handler |
Modified Files
| File | Changes |
|---|---|
components/Navbar.tsx |
Links to new pages instead of modal |
app/auth/google/callback/route.ts |
Support redirect parameter |
app/auth/github/callback/route.ts |
Support redirect parameter |
app/auth/facebook/callback/route.ts |
Support redirect parameter |
app/auth/discord/callback/route.ts |
Support redirect parameter |
Unchanged
lib/auth.ts- BetterAuth config (still active)app/api/auth/[...route]/route.ts- API handler (still works)data/system-config.json- OAuth config (still used)
🚀 How It Works
Authentication Flow Architecture
┌─────────────────────────────────────────────────────────────┐
│ Home Page (/) │
│ "Sign In" button → /signin │
│ "Get Started" button → /signup │
└──────────────────┬──────────────────────────────────────────┘
│
┌─────────┴──────────┐
│ │
┌────▼─────┐ ┌───▼──────┐
│ /signin │ │ /signup │
├──────────┤ ├──────────┤
│ Email │ │ First Name
│ Password │ │ Last Name │
│ OAuth │ │ Email │
│ buttons │ │ Password │
│ │ │ OAuth │
│ │ │ buttons │
└────┬─────┘ └────┬─────┘
│ │
│ POST /api/auth/ │ POST /api/auth/
│ login/email │ register
│ │
└─────────┬──────────┘
│
├─→ /account/webinars (default)
│
└─→ ?redirect=/custom/url
(if provided)
┌────────────────────────────┐
│ OAuth Sign-In Flow │
└────────────────────────────┘
Click OAuth button
│
▼
/api/auth/{provider}
(BetterAuth handler)
│
▼
Provider (Google/GitHub) login
│
▼
Redirect back to:
/auth/{provider}/callback?code=...&redirect=/url
│
▼
Route handler processes OAuth
│
▼
Redirect to:
/auth-callback?redirect=/url
│
▼
Auth callback page checks session
│
▼
Redirects to final URL or /account/webinars
🔐 Password Requirements (Sign-Up)
Real-time validation shows:
- ✅ 8-20 characters
- ✅ At least one uppercase letter
- ✅ At least one number
- ✅ No spaces allowed
Visual feedback:
- ❌ Red when not met
- ✅ Green when met
🧪 Testing the New Pages
Test Sign-In
# Go to sign-in page
http://localhost:3001/signin
# Test with email/password
Email: test@example.com
Password: TestPass123
# Test with redirect
http://localhost:3001/signin?redirect=/account/settings
Test Sign-Up
# Go to sign-up page
http://localhost:3001/signup
# Fill form
First Name: John
Last Name: Doe
Email: john@example.com
Password: SecurePass123
# Test password strength indicator
# Should show checkmarks when requirements met
Test OAuth
# Setup OAuth credentials first in /admin/setup
# Then visit /signin or /signup
# Click any provider button
# Should redirect to provider login
# After approval, redirects back and creates session
✨ Key Improvements Over Modal
| Aspect | Modal | Dedicated Pages |
|---|---|---|
| Popup blocker | ✓ Works | ✓ Works (better) |
| Mobile UX | Medium | Excellent |
| URL sharing | No | Yes |
| Browser back | Limited | Full support |
| SEO | No | Yes |
| Bookmarking | No | Yes |
| Screen size | Fixed | Responsive |
| Professional | Okay | Very |
| Standard practice | Old | Modern |
🔗 Related Files
- BETTERAUTH_OAUTH_ADMIN_SETUP.md - OAuth configuration
- BETTERAUTH_OAUTH_COMPLETE_SETUP.md - Complete auth setup
- OAUTH_QUICK_START.md - Quick reference
📚 URL Reference
| Page | URL | Purpose |
|---|---|---|
| Sign In | /signin |
Email/password login, OAuth buttons |
| Sign Up | /signup |
Create account, OAuth signup |
| OAuth Callback | /auth-callback |
Handles provider redirect |
| Dashboard | /account/webinars |
Default redirect after auth |
| Settings | /account/settings |
User profile settings |
| Admin | /admin |
Admin dashboard (if admin role) |
🎯 Summary
✅ Dedicated auth pages - No modal popups
✅ Professional design - Modern split layout
✅ OAuth support - All 4 providers
✅ Redirect URLs - Custom post-login navigation
✅ Password strength - Real-time validation
✅ Dark mode - Full support
✅ Responsive - Mobile to desktop
✅ No popup blocking - Full-page experience
The new dedicated auth pages provide a better user experience while completely solving the browser popup-blocker issue!