Communitygithub.com

sakilanwar12/nextjs-typescript-skills

Utilisez-le pour ajouter une authentification à Next.js — Auth.js/NextAuth credentials ou OAuth, protection de routes par middleware, accès à la session dans les Server Components et Server Actions, vérifications de rôles.

Qu'est-ce que nextjs-typescript-skills ?

Cette compétence fournit des directives et des patterns éprouvés pour intégrer Auth.js v5 (anciennement NextAuth.js) dans une application Next.js. Elle centralise la configuration dans un fichier `auth.ts`, utilise `middleware.ts` pour la protection initiale des routes, et insiste sur la vérification côté serveur des sessions dans les Server Components et les Server Actions. La compétence explique comment enrichir le type de session avec des rôles utilisateur via l'augmentation de module TypeScript, et comment valider les variables d'environnement au démarrage avec Zod. Elle est utile pour les développeurs Next.js souhaitant une implémentation sécurisée et maintenable de l'authentification, avec des patterns de code concrets et une checklist de bonnes pratiques. Supporte Auth.js v5 sur Next.js App Router, avec des exemples pour OAuth GitHub, les callbacks JWT et session, et la gestion des rôles.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sakilanwar12/nextjs-typescript-skills/tree/HEAD/skills/nextjs-auth

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Authentification Next.js (Auth.js v5)

Règles

  1. Centraliser la configuration dans auth.ts (export NextAuth() : handlers, auth, signIn, signOut). Ne jamais disperser les secrets des fournisseurs.
  2. Protéger les routes dans middleware.ts (wrapper auth compatible Edge) et revérifier la session dans les Server Actions/mutations — le middleware est pour l'expérience utilisateur, pas pour l'autorisation.
  3. Lire la session dans les Server Components via await auth(). Dans les Client Components, utiliser useSession() de next-auth/react avec <SessionProvider>.
  4. Ne jamais exposer les secrets (AUTH_SECRET, clés des fournisseurs) avec le préfixe NEXT_PUBLIC_. Valider les variables d'environnement avec Zod au démarrage.
  5. Vérifications de rôles : étendre le type de session via l'augmentation de module (user.role), appliquer côté serveur.

Patterns

// auth.ts
import NextAuth from 'next-auth';
import GitHub from 'next-auth/providers/github';

export const { handlers, auth, signIn, signOut } = NextAuth({
  providers: [GitHub],
  callbacks: {
    async session({ session, token }) {
      if (session.user) (session.user as { role?: string }).role = token.role as string;
      return session;
    },
    async jwt({ token, user }) {
      if (user) token.role = (user as { role?: string }).role ?? 'user';
      return token;
    },
  },
});

// middleware.ts
export { auth as middleware } from '@/auth';
export const config = { matcher: ['/dashboard/:path*', '/admin/:path*'] };

// app/api/auth/[...nextauth]/route.ts
import { handlers } from '@/auth';
export const { GET, POST } = handlers;
// Server Component gate
import { auth } from '@/auth';
import { redirect } from 'next/navigation';

export default async function AdminPage() {
  const session = await auth();
  if (!session?.user) redirect('/login');
  if ((session.user as { role?: string }).role !== 'admin')
    redirect('/dashboard');
  return <AdminView />;
}
// types/next-auth.d.ts — augmentation de rôle
import 'next-auth';
declare module 'next-auth' {
  interface User { role?: string }
}

Liste de vérification

  • Le matcher de middleware.ts couvre-t-il les chemins protégés ?
  • La session est-elle revérifiée dans les actions/mutations ?
  • Aucun secret exposé côté client ?
  • Le rôle est-il appliqué côté serveur, pas seulement par une interface utilisateur cachée ?
  • La déconnexion et l'expiration de session sont-elles gérées ?

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Skills associés