From dbe91ec2ff970efa8708a7fc8e3c847420ef1993 Mon Sep 17 00:00:00 2001 From: poduck Date: Thu, 4 Dec 2025 10:38:53 -0500 Subject: [PATCH] feat(auth): Convert login system to use email as username MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Backend login now accepts 'email' field (with backward compatibility) - User creation (signup, invitation, customer) uses email as username - Frontend login form updated with email input and validation - Updated test users to use email addresses as usernames - Updated all translation files (en, es, fr, de) 馃 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- frontend/src/api/auth.ts | 2 +- frontend/src/components/DevQuickLogin.tsx | 28 ++++++------- frontend/src/i18n/locales/de.json | 6 +-- frontend/src/i18n/locales/en.json | 6 +-- frontend/src/i18n/locales/es.json | 6 +-- frontend/src/i18n/locales/fr.json | 6 +-- frontend/src/pages/LoginPage.tsx | 28 ++++++------- smoothschedule/schedule/serializers.py | 14 ++----- .../smoothschedule/users/api_views.py | 41 ++++++++----------- .../management/commands/create_test_users.py | 20 ++++----- 10 files changed, 71 insertions(+), 86 deletions(-) diff --git a/frontend/src/api/auth.ts b/frontend/src/api/auth.ts index cd45008..12519e8 100644 --- a/frontend/src/api/auth.ts +++ b/frontend/src/api/auth.ts @@ -5,7 +5,7 @@ import apiClient from './client'; export interface LoginCredentials { - username: string; + email: string; password: string; } diff --git a/frontend/src/components/DevQuickLogin.tsx b/frontend/src/components/DevQuickLogin.tsx index 41bc759..6f6fb69 100644 --- a/frontend/src/components/DevQuickLogin.tsx +++ b/frontend/src/components/DevQuickLogin.tsx @@ -5,7 +5,7 @@ import { useQueryClient } from '@tanstack/react-query'; import { getBaseDomain, buildSubdomainUrl } from '../utils/domain'; export interface TestUser { - username: string; + email: string; password: string; role: string; label: string; @@ -14,56 +14,56 @@ export interface TestUser { const testUsers: TestUser[] = [ { - username: 'superuser', + email: 'superuser@platform.com', password: 'test123', role: 'SUPERUSER', label: 'Platform Superuser', color: 'bg-purple-600 hover:bg-purple-700', }, { - username: 'platform_manager', + email: 'manager@platform.com', password: 'test123', role: 'PLATFORM_MANAGER', label: 'Platform Manager', color: 'bg-blue-600 hover:bg-blue-700', }, { - username: 'platform_sales', + email: 'sales@platform.com', password: 'test123', role: 'PLATFORM_SALES', label: 'Platform Sales', color: 'bg-green-600 hover:bg-green-700', }, { - username: 'platform_support', + email: 'support@platform.com', password: 'test123', role: 'PLATFORM_SUPPORT', label: 'Platform Support', color: 'bg-yellow-600 hover:bg-yellow-700', }, { - username: 'tenant_owner', + email: 'owner@demo.com', password: 'test123', role: 'TENANT_OWNER', label: 'Business Owner', color: 'bg-indigo-600 hover:bg-indigo-700', }, { - username: 'tenant_manager', + email: 'manager@demo.com', password: 'test123', role: 'TENANT_MANAGER', label: 'Business Manager', color: 'bg-pink-600 hover:bg-pink-700', }, { - username: 'tenant_staff', + email: 'staff@demo.com', password: 'test123', role: 'TENANT_STAFF', label: 'Staff Member', color: 'bg-teal-600 hover:bg-teal-700', }, { - username: 'customer', + email: 'customer@demo.com', password: 'test123', role: 'CUSTOMER', label: 'Customer', @@ -86,11 +86,11 @@ export function DevQuickLogin({ embedded = false }: DevQuickLoginProps) { } const handleQuickLogin = async (user: TestUser) => { - setLoading(user.username); + setLoading(user.email); try { - // Call token auth API + // Call token auth API - username field contains email since we use email as username const response = await apiClient.post('/auth-token/', { - username: user.username, + username: user.email, password: user.password, }); @@ -176,12 +176,12 @@ export function DevQuickLogin({ embedded = false }: DevQuickLoginProps) {
{testUsers.map((user) => (