9.0 KiB
9.0 KiB
Signup Feature Implementation
Overview
A complete user signup/registration functionality has been added to the LuckyChit application, allowing new users to create accounts independently without requiring a manager to create them.
Changes Made
1. Backend Implementation
Authentication Controller (backend/src/controllers/authController.js)
- Added
signupfunction: A new public endpoint that allows users to register themselves - Features:
- Required fields:
mobile_number,full_name,password - Optional fields:
email,address,emergency_contact - Comprehensive validation for all fields:
- Mobile number must be exactly 10 digits
- Password must be at least 6 characters
- Email validation (if provided)
- Emergency contact validation (if provided)
- Checks for duplicate mobile numbers
- Automatic password hashing via User model hooks
- New users are created with
role: 'member'by default - Automatically logs in the user after signup (returns JWT token)
- Required fields:
Authentication Routes (backend/src/routes/auth.js)
- Added public signup route:
POST /auth/signup - Route is placed before the
authenticateTokenmiddleware, making it publicly accessible
2. Frontend Implementation
API Service (luckychit/lib/core/services/api_service.dart)
- Added
signupmethod: Handles HTTP POST request to/auth/signup - Accepts all required and optional fields
- Automatically saves JWT token upon successful signup
Auth Service (luckychit/lib/core/services/auth_service.dart)
- Added
signupmethod: Manages signup flow - Handles response processing
- Automatically saves user data and authentication state
- Provides error handling with user-friendly messages
Signup Screen (luckychit/lib/features/auth/views/signup_screen.dart)
- New beautiful UI matching the existing login screen design
- Form fields:
- Mobile Number (required) - with 10-digit validation
- Full Name (required)
- Email (optional) - with email format validation
- Address (optional) - multi-line text field
- Emergency Contact (optional) - with 10-digit validation
- Password (required) - with visibility toggle, minimum 6 characters
- Confirm Password (required) - must match password
- Features:
- Real-time form validation
- Loading state during signup
- Success/error snackbar messages
- "Already have an account? Login" link
- Consistent with app's green theme and design language
Login Screen Updates (luckychit/lib/features/auth/views/login_screen.dart)
- Added "Don't have an account? Sign Up" link: Navigates to the signup screen
- Import added for the new signup screen
3. Documentation
API Documentation (backend/API_DOCUMENTATION.md)
- Added comprehensive signup endpoint documentation:
- Endpoint URL and method
- Request body structure with all fields
- Required vs optional fields clearly marked
- Example response with all fields
- Success response structure
Test Script (backend/test-signup.js)
- Comprehensive test suite for the signup functionality:
- Tests successful signup with all fields
- Tests login with newly created account
- Tests profile retrieval
- Tests validation errors:
- Missing required fields
- Invalid mobile number format
- Short password
- Duplicate mobile number
- Provides clear console output for all test cases
API Endpoint Details
Signup Endpoint
POST /api/auth/signup
Request Body:
{
"mobile_number": "9876543210",
"full_name": "John Doe",
"password": "password123",
"email": "john@example.com", // Optional
"address": "123 Main St", // Optional
"emergency_contact": "9876543211" // Optional
}
Success Response (201):
{
"success": true,
"message": "Account created successfully",
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": {
"id": "uuid",
"mobile_number": "9876543210",
"full_name": "John Doe",
"email": "john@example.com",
"address": "123 Main St",
"emergency_contact": "9876543211",
"role": "member",
"is_active": true,
"created_at": "2025-11-05T10:30:00.000Z",
"updated_at": "2025-11-05T10:30:00.000Z"
}
}
}
Error Responses:
400 Bad Request: Validation errors (missing fields, invalid format, duplicate mobile)500 Internal Server Error: Server-side errors
Validation Rules
Mobile Number
- Must be exactly 10 digits
- Must contain only numbers
- Must be unique (not already registered)
Full Name
- Required field
- No specific format restrictions
Password
- Must be at least 6 characters long
- Automatically hashed using bcrypt (12 rounds)
Email (Optional)
- Must be valid email format
- Regex:
^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$
Address (Optional)
- Text field, no restrictions
Emergency Contact (Optional)
- Must be exactly 10 digits if provided
- Must contain only numbers
Testing Instructions
Backend Testing
-
Start the backend server:
cd backend npm start -
Run the test script:
node test-signup.js -
Manual API testing with curl:
curl -X POST http://localhost:3000/api/auth/signup \ -H "Content-Type: application/json" \ -d '{ "mobile_number": "9123456789", "full_name": "Test User", "password": "test123456", "email": "test@example.com" }'
Frontend Testing
-
Run the Flutter app:
cd luckychit flutter run -
Test the signup flow:
- On the login screen, tap "Sign Up"
- Fill in all required fields (mobile, name, password, confirm password)
- Optionally fill in email, address, emergency contact
- Tap "Sign Up" button
- Should automatically log in and navigate to member dashboard
-
Test validation:
- Try submitting without required fields
- Try invalid mobile number (not 10 digits)
- Try mismatched passwords
- Try invalid email format
User Flow
-
New User Registration:
- User opens the app → sees Login screen
- User taps "Sign Up" link
- User fills in the signup form
- User submits the form
- Backend validates and creates the account
- User is automatically logged in
- User is redirected to Member Dashboard
-
Existing User:
- User can still use the "Login" option
- From signup screen, user can navigate back to login via "Already have an account? Login" link
Security Features
-
Password Security:
- Passwords are hashed using bcrypt with 12 salt rounds
- Plain text passwords are never stored
- Password hashing happens automatically via Sequelize hooks
-
JWT Authentication:
- Upon successful signup, JWT token is generated and returned
- Token contains user ID, role, and mobile number
- Token expires in 24 hours (configurable via
JWT_EXPIRES_INenv variable)
-
Input Validation:
- All inputs are validated on both frontend and backend
- SQL injection prevention via Sequelize ORM
- XSS prevention via input sanitization
Database Impact
No database schema changes were needed. The existing users table supports all the signup functionality:
- All required fields already exist
- The
created_byfield is set tonullfor self-registered users (vs manager-created users) - Role is automatically set to
'member'for signups
Future Enhancements (Optional)
-
Email Verification:
- Send verification email after signup
- Require email verification before full access
-
OTP Verification:
- SMS-based mobile number verification
- Two-factor authentication
-
Social Login:
- Google Sign-In
- Facebook Login
-
Password Strength Indicator:
- Visual feedback on password strength
- Recommendations for stronger passwords
-
Terms and Conditions:
- Checkbox to accept terms
- Link to privacy policy
Compatibility
- ✅ No breaking changes to existing functionality
- ✅ Existing login flow remains unchanged
- ✅ Manager's "Create Member" functionality still works
- ✅ All existing API endpoints remain functional
- ✅ Database backward compatible
Files Modified
Backend
backend/src/controllers/authController.js- Added signup functionbackend/src/routes/auth.js- Added signup routebackend/API_DOCUMENTATION.md- Added signup documentation
Frontend
luckychit/lib/core/services/api_service.dart- Added signup API methodluckychit/lib/core/services/auth_service.dart- Added signup service methodluckychit/lib/features/auth/views/login_screen.dart- Added signup linkluckychit/lib/features/auth/views/signup_screen.dart- NEW: Complete signup UI
Documentation
SIGNUP_FEATURE_IMPLEMENTATION.md- This file
Testing
backend/test-signup.js- NEW: Comprehensive test suite
Support
For any issues or questions regarding the signup functionality, please refer to:
- API Documentation:
backend/API_DOCUMENTATION.md - Test Script:
backend/test-signup.js - This Implementation Guide:
SIGNUP_FEATURE_IMPLEMENTATION.md