Harmadik Gyakorlat - MINTA Megoldás
Ez a mappa tartalmazza a harmadik gyakorlat teljes, működő megoldását.
Amit implementáltunk:
1. Authentication (Hitelesítés)
- User regisztráció jelszó hash-eléssel (bcrypt)
- User bejelentkezés JWT tokenekkel
- Cookie-based session kezelés
- Token frissítés (refresh token)
- Kijelentkezés
2. Authorization (Jogosultságkezelés)
- JWT token validálás middleware
- Role-based access control (RBAC)
- Resource ownership ellenőrzés
- Védett endpoint-ok
3. Security Best Practices
- HttpOnly cookie-k
- Secure cookie-k (production)
- JWT token expiry
- Password hashing (bcrypt)
- Input validáció
Indítás
npm install
npm run docker:up
npx prisma generate
npx prisma migrate dev
npm run dev
API Endpoints
Auth Endpoints
POST /api/auth/register- RegisztrációPOST /api/auth/login- BejelentkezésPOST /api/auth/logout- Kijelentkezés (védett)POST /api/auth/refresh- Token frissítésGET /api/auth/me- Aktuális user (védett)
Blog Endpoints
GET /api/blogs- Összes blog (publikus)GET /api/blogs/:id- Egy blog (publikus)POST /api/blogs- Blog létrehozás (védett)PUT /api/blogs/:id- Blog módosítás (védett + ownership)DELETE /api/blogs/:id- Blog törlés (védett + ownership)
Példa Használat
# Regisztráció
curl -X POST http://localhost:3000/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "test@test.com",
"username": "testuser",
"password": "Test1234"
}'
# Login
curl -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "test@test.com",
"password": "Test1234"
}'
# Blog létrehozás (védett)
curl -X POST http://localhost:3000/api/blogs \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "My Blog",
"content": "Blog content..."
}'
Tanulási Pontok
- JWT Tokens: Access és Refresh tokenek használata
- Bcrypt: Jelszó hash-elés és validálás
- Cookie-based Auth: HttpOnly, Secure cookie-k
- Authorization Middleware: Token validálás, role check, ownership
- Security: Best practices implementálása