feat: add authentication support and user model

- Updated `env.example` to include NextAuth configuration for authentication.
- Added `next-auth` dependency to manage user sessions.
- Introduced `User` model in Prisma schema with fields for user details and password hashing.
- Integrated `AuthProvider` in layout for session management across the app.
- Enhanced `Header` component with `AuthButton` for user authentication controls.
This commit is contained in:
Julien Froidefond
2025-09-30 21:49:52 +02:00
parent 43c141d3cd
commit 17b86b6087
20 changed files with 1418 additions and 13 deletions

View File

@@ -0,0 +1,56 @@
'use client'
import { useSession, signOut } from 'next-auth/react'
import { useRouter } from 'next/navigation'
import { Button } from '@/components/ui/Button'
export function AuthButton() {
const { data: session, status } = useSession()
const router = useRouter()
if (status === 'loading') {
return (
<div className="text-[var(--muted-foreground)] text-sm">
Chargement...
</div>
)
}
if (!session) {
return (
<Button
onClick={() => router.push('/login')}
size="sm"
>
Se connecter
</Button>
)
}
return (
<div className="flex items-center gap-1">
<Button
onClick={() => router.push('/profile')}
variant="ghost"
size="sm"
className="p-1 h-auto"
title={`Profil - ${session.user?.email}`}
>
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" />
</svg>
</Button>
<Button
onClick={() => signOut({ callbackUrl: '/login' })}
variant="ghost"
size="sm"
className="p-1 h-auto"
title="Déconnexion"
>
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" />
</svg>
</Button>
</div>
)
}