Some checks failed
- Add Development URL Quick Reference section to url-routing overview with all login URLs, entry points, and full examples - Replace /shop/ path segments with /storefront/ across 50 docs files - Update file references: shop_pages.py → storefront_pages.py, templates/shop/ → templates/storefront/, api/v1/shop/ → api/v1/storefront/ - Preserve domain references (orion.shop) and /store/ staff dashboard paths - Archive docs left unchanged (historical) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2.6 KiB
2.6 KiB
Customer Authentication - Quick Summary
Date: 2025-11-24 Full Documentation: customer-authentication-implementation.md
What Was Implemented
✅ Customer login, registration, and forgot password pages ✅ Customer dashboard with account overview ✅ Complete customer authentication system separate from admin/store ✅ Multi-access routing support (domain, subdomain, path-based) ✅ Secure cookie management with proper path restrictions ✅ Theme integration and responsive design ✅ Custom logout confirmation modal (Tailwind CSS + Alpine.js)
Key Files
Created
app/templates/storefront/account/login.htmlapp/templates/storefront/account/register.htmlapp/templates/storefront/account/forgot-password.htmlapp/templates/storefront/account/dashboard.html
Modified
app/api/v1/storefront/auth.py- Dynamic cookie pathsapp/api/deps.py- Customer authentication dependencyapp/services/customer_service.py- Direct JWT token creationapp/routes/storefront_pages.py- Customer type hintsmiddleware/store_context.py- Harmonized detection methods
Critical Architecture Decision
Customers ≠ Users
- Users (admin/store): Have
role,username, managed byauth_service - Customers: Store-scoped, have
customer_number, managed bycustomer_service
JWT tokens have type: "customer" to distinguish them.
Cookie Path Logic
# Domain/Subdomain access
cookie_path = "/storefront"
# Path-based access (/storefront/orion)
cookie_path = f"/storefront/{store_code}"
Authentication Flow
- Login → Create JWT with
type: "customer" - Set cookie with store-aware path
- Dashboard request → Cookie sent (path matches!)
- Dependency decodes JWT, validates type, loads Customer
- Render dashboard with customer data
Logout Flow
- User clicks "Logout" button → Custom Tailwind modal appears
- User confirms → API call to
/api/v1/storefront/auth/logout - Cookie deleted, localStorage cleared
- Success toast shown, redirect to login page
Note: Uses custom modal instead of browser's confirm() for better UX and styling consistency.
Testing URLs
# Path-based access
http://localhost:8000/storefront/orion/account/login
http://localhost:8000/storefront/orion/account/register
http://localhost:8000/storefront/orion/account/dashboard
Next Steps (TODO)
- Implement password reset functionality
- Add email verification
- Build account management pages (orders, profile, addresses)
- Add refresh tokens for longer sessions
- Implement rate limiting on auth endpoints