You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

61 lines
1.3 KiB

// server/api/auth/me.get.ts
/**
* GET /api/auth/me
*
* Get current authenticated user
*
* Response:
* {
* "id": "uuid",
* "experimentaId": "cidaas-sub",
* "email": "user@example.com",
* "firstName": "Max",
* "lastName": "Mustermann",
* ...
* }
*
* Returns 401 if not authenticated
*/
import { eq } from 'drizzle-orm'
import { users } from '../../database/schema'
export default defineEventHandler(async (event) => {
// 1. Require authentication (throws 401 if not logged in)
const { user: sessionUser } = await requireUserSession(event)
// 2. Fetch fresh user data from database
const db = useDatabase()
const user = await db.query.users.findFirst({
where: eq(users.id, sessionUser.id),
})
if (!user) {
throw createError({
statusCode: 404,
statusMessage: 'User not found',
})
}
// 3. Return user profile (exclude sensitive fields if any)
return {
id: user.id,
experimentaId: user.experimentaId,
email: user.email,
firstName: user.firstName,
lastName: user.lastName,
phone: user.phone,
// Billing address
salutation: user.salutation,
dateOfBirth: user.dateOfBirth,
street: user.street,
postCode: user.postCode,
city: user.city,
countryCode: user.countryCode,
createdAt: user.createdAt,
updatedAt: user.updatedAt,
}
})