From role-fullstack
Implement complete authentication flows: login, signup, forgot-password pages, JWT + refresh tokens, session-based auth, social login (Google, GitHub, Apple), MFA/2FA, protected routes via middleware, and role-based UI rendering.
npx claudepluginhub rnavarych/alpha-engineer --plugin role-fullstackThis skill is limited to using the following tools:
Activate when adding authentication or authorization to a fullstack application -- login/signup pages, protected routes, social login, token management, or role-based access control.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Audits ECC Tools repo for cost burns from runaway PR creation, quota bypasses, premium-model leakage, duplicate jobs, and GitHub App spikes.
Activate when adding authentication or authorization to a fullstack application -- login/signup pages, protected routes, social login, token management, or role-based access control.
| Library | Framework | Session Store | OAuth Built-in | MFA Support |
|---|---|---|---|---|
| NextAuth.js / Auth.js | Next.js, SvelteKit | DB / JWT | Yes | Via adapter |
| Lucia | Any | DB | Manual | Manual |
| Clerk | Any | Managed | Yes | Yes |
| Supabase Auth | Any | Managed | Yes | Yes |
react-hook-form + zod for validation. Fields: email, password, confirm password (signup).bcrypt (cost 12+) or argon2, store user in DB.httpOnly, secure, sameSite=lax cookie) or JWT pair.callbackUrl).httpOnly cookie. Rotate on every use (one-time use tokens)./api/auth/refresh, replays the original request.{APP_URL}/api/auth/callback/{provider}.otpauth or speakeasy library. Generate a secret, show QR code, verify 6-digit code.// Next.js middleware.ts
export function middleware(request: NextRequest) {
const token = request.cookies.get('session-token');
if (!token && request.nextUrl.pathname.startsWith('/dashboard')) {
return NextResponse.redirect(new URL('/login', request.url));
}
}
export const config = { matcher: ['/dashboard/:path*', '/api/protected/:path*'] };
admin, editor, viewer.<Can action="edit" resource="post"> component or usePermissions() hook to conditionally render UI elements.