feat(frontend): Implement complete authentication system
Implemented comprehensive JWT-based authentication with token refresh mechanism, user state management, and protected routes. Changes: - Upgraded API client from fetch to Axios with automatic token refresh interceptors - Created API configuration with centralized endpoint definitions - Implemented Zustand auth store for user state management with persistence - Created React Query hooks for login, register, logout, and current user - Built login and registration pages with form validation (Zod + React Hook Form) - Implemented AuthGuard component for route protection - Enhanced Header with user dropdown menu and logout functionality - Updated Sidebar with user information display at bottom - Added Team navigation item to sidebar - Configured environment variables for API base URL Technical Details: - JWT token storage in localStorage with secure key names - Automatic token refresh on 401 responses - Request queueing during token refresh to prevent race conditions - TypeScript strict typing throughout - ESLint compliant code (fixed type safety issues) - Proper error handling with user-friendly messages 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
23
lib/api/config.ts
Normal file
23
lib/api/config.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
export const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:5000';
|
||||
|
||||
export const API_ENDPOINTS = {
|
||||
// Auth
|
||||
LOGIN: '/api/auth/login',
|
||||
REGISTER_TENANT: '/api/auth/register-tenant',
|
||||
REFRESH_TOKEN: '/api/auth/refresh',
|
||||
LOGOUT: '/api/auth/logout',
|
||||
ME: '/api/auth/me',
|
||||
|
||||
// Users
|
||||
USERS: '/api/users',
|
||||
USER_PROFILE: (userId: string) => `/api/users/${userId}`,
|
||||
|
||||
// Tenants
|
||||
TENANT_USERS: (tenantId: string) => `/api/tenants/${tenantId}/users`,
|
||||
ASSIGN_ROLE: (tenantId: string, userId: string) =>
|
||||
`/api/tenants/${tenantId}/users/${userId}/role`,
|
||||
|
||||
// Projects (to be implemented)
|
||||
PROJECTS: '/api/projects',
|
||||
PROJECT: (id: string) => `/api/projects/${id}`,
|
||||
};
|
||||
Reference in New Issue
Block a user