Endpoint
POST
/auth/login
Request
Headers
application/json
Body Parameters
User’s email address (max 255 characters)Must be a valid email format
User’s password (1-128 characters)
Example Request
cURL
JavaScript
Python
Response
Success Response (200)
Always
true for successful requestsUser’s unique identifier (MongoDB ObjectId)
User’s email address
User’s full name
User’s role (e.g., “user”, “admin”)
Account status (“active”, “inactive”, “banned”)
User preferences (theme, notifications, language, etc.)
User statistics (meals logged, symptoms tracked, streaks, etc.)
ISO 8601 timestamp of account creation
ISO 8601 timestamp of last update
Seconds until access token expires (typically 900 = 15 minutes)
Success message: “Login realizado com sucesso!”
Response Cookies
The following HttpOnly cookies are automatically set:accessToken: JWT access token (expires in 15 minutes)refreshToken: JWT refresh token (expires in 7 days)
Example Success Response
Error Responses
Invalid Credentials (401)
Invalid Credentials with Warning (401)
After 3 or more failed attempts, the response includes remaining attempts:Account Locked (429)
After 5 failed attempts, the account is locked for 15 minutes:Account Banned (401)
Account Inactive (401)
Rate Limit Exceeded (429)
Brute Force Protection
The login endpoint includes robust brute force protection:- Failed Attempt Tracking: All failed login attempts are logged by email
- Account Lockout: After 5 failed attempts, the account is locked for 15 minutes
- Warning System: After 3 failed attempts, users are warned about remaining attempts
- IP Tracking: Failed attempts are tracked by IP address for security auditing
- Generic Errors: Error messages don’t reveal whether the email exists (prevents email enumeration)
Notes
- Rate Limit: 5 requests per 15 minutes per IP
- Token Storage: Tokens are automatically stored in HttpOnly cookies
- Device Tracking: The system tracks device and IP for security purposes
- Activity Logging: Login events are logged for security auditing
- Achievement Unlock: First login triggers the “first_login” achievement
- Stats Update: The
lastActivetimestamp is updated on successful login