Implements secure authentication and user account management for My Account portal: registration, verification, login, sessions, password reset, protected routes, profiles, RBAC.
From larouex-fullstack-buildernpx claudepluginhub ashikparvez89/larouex-fullstack-pluginManages AI Agent Skills on prompts.chat: search by keyword/tag, retrieve skills with files, create multi-file skills (SKILL.md required), add/update/remove files for Claude Code.
Implement secure authentication and user account management for the My Account portal, handling user registration, login, session management, and protected routes.
interface RegistrationFlow {
steps: [
'Enter email and password',
'Verify email address',
'Complete profile information',
'Access dashboard',
];
validation: {
email: 'Valid format & unique';
password: 'Min 8 chars, complexity rules';
profile: 'Required fields complete';
};
}
interface LoginFlow {
methods: ['email/password', 'social-auth?'];
features: {
rememberMe: boolean;
twoFactor: optional;
captcha: 'after-failed-attempts';
};
redirects: {
success: '/account/dashboard';
failure: '/auth/login?error=invalid';
};
}
interface AccountDashboard {
sections: {
overview: {
recentActivity: Activity[];
notifications: Notification[];
quickActions: Action[];
};
permits: {
active: Permit[];
history: Permit[];
drafts: Application[];
};
payments: {
outstanding: Invoice[];
history: Payment[];
autopay: Settings;
};
reservations: {
upcoming: Reservation[];
history: Reservation[];
};
requests: {
open: ServiceRequest[];
closed: ServiceRequest[];
};
};
}
interface UserProfile {
// Personal Information
id: string;
email: string;
firstName: string;
lastName: string;
phone?: string;
// Address
address: {
street: string;
city: string;
state: string;
zip: string;
};
// Preferences
preferences: {
language: 'en' | 'es' | 'other';
notifications: {
email: boolean;
sms: boolean;
push: boolean;
};
accessibility: {
highContrast: boolean;
largeText: boolean;
};
};
// Account Status
status: 'active' | 'suspended' | 'pending';
createdAt: Date;
lastLogin: Date;
}
// Next.js Middleware
export function middleware(request: NextRequest) {
const token = request.cookies.get('auth-token');
if (!token && request.nextUrl.pathname.startsWith('/account')) {
return NextResponse.redirect(
new URL('/auth/login?redirect=' + request.nextUrl.pathname, request.url)
);
}
}
// Protected Page Component
const ProtectedPage = () => {
const { user, loading } = useAuth();
if (loading) return <LoadingSpinner />;
if (!user) {
router.push('/auth/login');
return null;
}
return <PageContent />;
};
interface SessionConfig {
storage: 'cookies' | 'localStorage';
duration: {
default: '2 hours';
rememberMe: '30 days';
};
refresh: {
enabled: true;
interval: '15 minutes';
};
security: {
httpOnly: true;
secure: true; // HTTPS only
sameSite: 'strict';
};
}
// Password Reset Flow
interface PasswordReset {
request: {
endpoint: '/auth/forgot-password';
input: { email: string };
output: { message: string };
};
reset: {
endpoint: '/auth/reset-password';
input: {
token: string;
password: string;
confirmPassword: string;
};
validation: {
tokenExpiry: '1 hour';
passwordStrength: 'medium';
};
};
}