update backend/src/routes/auth.ts

This commit is contained in:
Giuseppe Lombardo 2026-08-12 17:45:55 +00:00
parent e1b3ea65ba
commit b20eec366f

View File

@ -0,0 +1,40 @@
import { Router, Request, Response } from 'express';
import { PrismaClient } from '@prisma/client';
import bcrypt from 'bcryptjs';
import { signAuthToken, requireAuth, AuthedRequest } from '../middleware/auth';
const prisma = new PrismaClient();
export const authRouter = Router();
function publicUser(u: { id: string; email: string; fullName: string; role: string; roomId: string | null }) {
return { id: u.id, email: u.email, fullName: u.fullName, role: u.role, roomId: u.roomId };
}
// POST /v1/auth/login { email, password } -> { token, user }
authRouter.post('/auth/login', async (req: Request, res: Response) => {
const { email, password } = req.body || {};
if (!email || !password) {
return res.status(400).json({ error: 'E-Mail und Passwort erforderlich' });
}
const user = await prisma.user.findUnique({ where: { email: String(email).toLowerCase().trim() } });
if (!user) {
return res.status(401).json({ error: 'E-Mail oder Passwort falsch' });
}
const passwordOk = await bcrypt.compare(String(password), user.passwordHash);
if (!passwordOk) {
return res.status(401).json({ error: 'E-Mail oder Passwort falsch' });
}
const token = signAuthToken({ id: user.id, email: user.email, role: user.role });
res.status(200).json({ token, user: publicUser(user) });
});
// GET /v1/auth/me -> aktuell eingeloggter Nutzer (zur Session-Wiederherstellung)
authRouter.get('/auth/me', requireAuth, async (req: AuthedRequest, res: Response) => {
const user = await prisma.user.findUnique({ where: { id: req.user!.id } });
if (!user) return res.status(404).json({ error: 'Nutzer nicht gefunden' });
res.status(200).json({ user: publicUser(user) });
});