Claude-skill-registry Authentication Management
Manages authentication flow for MutuaPIX (Laravel Sanctum + Next.js), handles mock mode security, and validates environment configurations
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/authentication-management" ~/.claude/skills/majiayu000-claude-skill-registry-authentication-management && rm -rf "$T"
skills/data/authentication-management/SKILL.mdAuthentication Management Skill
Overview
This skill manages the complete authentication system for MutuaPIX, covering:
- Production authentication flow (Laravel Sanctum + JWT)
- Development mock mode (for frontend testing without backend)
- Environment detection and security validation
- CSRF token handling
- Session management
System Architecture
Backend: Laravel Sanctum
Authentication Flow:
1. GET /sanctum/csrf-cookie → Receives XSRF-TOKEN cookie 2. POST /api/v1/login {email, password, X-XSRF-TOKEN header} 3. Backend validates credentials 4. Returns {token, user} (token expires in 24h) 5. All requests include: Authorization: Bearer {token}
Configuration:
- Sanctum Expiration: 1440 minutes (24 hours)
- Stateful Domain:
matrix.mutuapix.com - Guard:
web - Rate Limiting: 5 requests/minute on login
Files:
- Authentication routesbackend/routes/api/auth.php
- Login/logout logicbackend/app/Http/Controllers/Auth/AuthController.php
- Sanctum configurationbackend/config/sanctum.php
- CORS settingsbackend/config/cors.php
Frontend: Next.js + Zustand
State Management:
- Store:
frontend/src/stores/authStore.ts - Persistence: localStorage['auth-storage']
- Token Injection: Axios interceptor adds
Authorization: Bearer {token}
Files:
- Authentication statefrontend/src/stores/authStore.ts
- API callsfrontend/src/services/auth.service.ts
- Authentication hookfrontend/src/hooks/useAuth.ts
- Auth context providerfrontend/src/providers/AuthProvider.tsx
Critical Security Issue: Mock Mode
Why Mock Mode Exists
Purpose: Allow frontend development without running backend API Problem: Implementation has security vulnerabilities if not properly configured
Mock Components
1. Environment Detection (src/lib/env.ts
)
src/lib/env.ts// ✅ CORRECT: Uses NEXT_PUBLIC_NODE_ENV for client-side detection export const IS_PRODUCTION = process.env.NEXT_PUBLIC_NODE_ENV === 'production'; export const IS_DEVELOPMENT = !IS_PRODUCTION;
⚠️ WHY THIS IS CRITICAL:
is undefined in Next.js client-side codeprocess.env.NODE_ENV- Only
variables are replaced at build timeNEXT_PUBLIC_* - Previous code using
always evaluated to false (insecure!)process.env.NODE_ENV
2. authStore Default State (CRITICAL VULNERABILITY)
File:
frontend/src/stores/authStore.ts:91-96
❌ INSECURE (Current State):
user: devLocalUser, // Mock admin user by default token: devLocalToken, // "local-dev-token" isAuthenticated: true, // Already authenticated!
✅ SECURE (Required Fix):
user: null, // Unauthenticated by default token: null, isAuthenticated: false,
3. MockLoginButton
File:
frontend/src/components/auth/MockLoginButton.tsx
Status: ✅ Secured (renders
null in production)
if (IS_PRODUCTION) { return null; // Button not rendered in production }
Environment Configuration
Production VPS (138.199.162.115)
File:
/var/www/mutuapix-frontend-production/.env.production
# ✅ CORRECT CONFIGURATION NEXT_PUBLIC_NODE_ENV=production NEXT_PUBLIC_API_URL=https://api.mutuapix.com NEXT_PUBLIC_API_BASE_URL=https://api.mutuapix.com NEXT_PUBLIC_USE_AUTH_MOCK=false NEXT_PUBLIC_AUTH_DISABLED=false NEXT_PUBLIC_DEBUG=false
Critical: Must run
npm run build (NOT just PM2 restart) for changes to take effect!
Local Development
File:
frontend/.env.local
# ✅ RECOMMENDED CONFIGURATION NEXT_PUBLIC_NODE_ENV=development NEXT_PUBLIC_API_URL=http://localhost:8000 # Local backend! NEXT_PUBLIC_API_BASE_URL=http://localhost:8000 NEXT_PUBLIC_USE_AUTH_MOCK=true # Enable mock for dev NEXT_PUBLIC_AUTH_DISABLED=false NEXT_PUBLIC_DEBUG=true
⚠️ NEVER point local environment to production API!
Deployment Checklist
When deploying authentication changes:
Backend Deployment
- Verify Sanctum configuration hasn't changed
- Check CORS allows frontend domain
- Test CSRF token endpoint:
curl https://api.mutuapix.com/sanctum/csrf-cookie -I - Test login endpoint with invalid credentials (should return 401)
- Restart PM2:
ssh root@49.13.26.142 'pm2 restart mutuapix-api'
Frontend Deployment
- Verify
exists on VPS with correct values.env.production - Check
is setNEXT_PUBLIC_NODE_ENV=production - Check
is setNEXT_PUBLIC_USE_AUTH_MOCK=false - CRITICAL: Delete
cache:.nextrm -rf .next - Run full build:
npm run build - Restart PM2:
pm2 restart mutuapix-frontend - Verify mock button NOT visible: Use MCP Chrome DevTools
- Verify console shows
IS_PRODUCTION: true - Test login flow with real credentials
Post-Deployment Verification (MCP)
// 1. Navigate to production login await mcp__chrome-devtools__navigate_page({ url: 'https://matrix.mutuapix.com/login' }); // 2. Check console for mock mode messages const console = await mcp__chrome-devtools__list_console_messages(); // Should NOT contain: "🔓 Acesso liberado no modo desenvolvimento" // 3. Take snapshot to verify mock button not rendered const snapshot = await mcp__chrome-devtools__take_snapshot(); // Should NOT contain: "Login de Desenvolvimento" button // 4. Monitor network requests after login const requests = await mcp__chrome-devtools__list_network_requests({ resourceTypes: ['xhr', 'fetch'] }); // Should call: https://api.mutuapix.com/api/v1/login // Should NOT call: back-api-mutuapix.test (old dev URL)
Common Issues & Solutions
Issue 1: Mock Login Button Visible in Production
Symptoms:
- Button "🔓 Login de Desenvolvimento" appears on production login page
- Console shows development messages
Diagnosis:
# Check production environment file ssh root@138.199.162.115 'cat /var/www/mutuapix-frontend-production/.env.production | grep NODE_ENV'
Solution:
- Ensure
inNEXT_PUBLIC_NODE_ENV=production.env.production - Delete cache:
ssh root@138.199.162.115 'cd /var/www/mutuapix-frontend-production && rm -rf .next' - Rebuild:
ssh root@138.199.162.115 'cd /var/www/mutuapix-frontend-production && npm run build' - Restart:
ssh root@138.199.162.115 'pm2 restart mutuapix-frontend'
Issue 2: API Calls Going to Wrong URL
Symptoms:
- Network tab shows requests to
back-api-mutuapix.test - CORS errors in console
Diagnosis:
# Check if environment variables were embedded in build ssh root@138.199.162.115 'grep -r "back-api-mutuapix.test" /var/www/mutuapix-frontend-production/.next/static/chunks/ | head -5'
Solution:
- Same as Issue 1 - rebuild with correct
.env.production - Verify API URL in build:
grep -r "api.mutuapix.com" .next/static/chunks/ | head -1
Issue 3: Login Returns 401 Unauthorized
Symptoms:
- Valid credentials rejected
- Backend logs show "CSRF token mismatch"
Diagnosis:
# Test CSRF token endpoint curl -I https://api.mutuapix.com/sanctum/csrf-cookie # Check CORS headers curl -I https://api.mutuapix.com/api/v1/login \ -H "Origin: https://matrix.mutuapix.com"
Solution:
- Verify
hasbackend/config/sanctum.php
in stateful domainsmatrix.mutuapix.com - Verify
allows frontend originbackend/config/cors.php - Check cookies are being set with correct domain (
).mutuapix.com
Issue 4: User Already Authenticated Without Login
Symptoms:
- Fresh browser session shows user as logged in
- Mock admin user appears automatically
Diagnosis:
// Check authStore default state // File: frontend/src/stores/authStore.ts:91-96
Solution:
- Fix authStore default state to:
user: null, token: null, isAuthenticated: false, - Rebuild and deploy frontend
Testing Procedures
Manual Testing (Production)
-
Clear State:
// In browser console localStorage.clear(); sessionStorage.clear(); location.reload(); -
Verify Unauthenticated:
- Should redirect to
/login - Cannot access
or other protected routes/user/dashboard
- Should redirect to
-
Test Login:
- Enter valid credentials
- Should see "Login realizado com sucesso" toast
- Should redirect to dashboard
- Token should be in
localStorage['auth-storage']
-
Test Protected Routes:
- Navigate to
/user/dashboard - Should see user data (not mock data)
- Network tab should show
in headersAuthorization: Bearer {token}
- Navigate to
-
Test Logout:
- Click logout
- Should redirect to
/login
should be emptylocalStorage['auth-storage']
Automated Testing (MCP)
Use MCP Chrome DevTools for automated verification (see "Post-Deployment Verification" section above).
Security Best Practices
- Never commit
files (except.env
).env.example - Always verify environment before deployment
- Use MCP Chrome DevTools to inspect production behavior
- Test logout flow to ensure tokens are invalidated
- Monitor failed login attempts via backend logs
- Rotate Sanctum tokens if compromise suspected
Related Skills
- PIX Validation Expert - Handles PIX key email matching
- Documentation Updater - Keeps CLAUDE.md current with auth changes
Version History
-
1.1.0 (2025-10-16): Added comprehensive security audit
- Documented mock mode vulnerabilities
- Added MCP verification procedures
- Included deployment checklist
- Added troubleshooting guide
-
1.0.0 (2025-10-10): Initial authentication skill
- Basic login/logout flow
- Sanctum integration
- Environment detection