Files
paprika-api/app/controllers/auth_controller.ts
T
2025-07-18 10:27:33 +02:00

56 lines
1.6 KiB
TypeScript

import type { HttpContext } from '@adonisjs/core/http'
import { registerValidator, loginValidator } from '#validators/auth'
import User from '#models/user'
import logger from '@adonisjs/core/services/logger'
export default class AuthController {
async register({ request }: HttpContext) {
try {
const data = await request.validateUsing(registerValidator)
const user = await User.create(data)
logger.info('User registered: %s', user.fullName, user.email, request.ip())
return User.accessTokens.create(user)
}
catch(error) {
logger.error('Registration failed: %s',error)
throw(error)
}
}
async login({ request }: HttpContext) {
try {
const { email, password } = await request.validateUsing(loginValidator)
const user = await User.verifyCredentials(email, password)
logger.info('User logged in: %s', email)
return User.accessTokens.create(user)
}
catch(error) {
logger.error('Login failed: %s',error)
throw error
}
}
async logout({ auth }: HttpContext) {
const user = auth.user!
logger.info('User logout: %s', auth.getUserOrFail().email)
try {
await User.accessTokens.delete(user, user.currentAccessToken.identifier)
return { message: 'User logged out' }
}
catch(error){
logger.error('Logout failed: %s',error)
throw(error)
}
}
async me({ auth }: HttpContext) {
if (await auth.check()) {
return { user: auth.user }
} else {
await User.accessTokens.delete(auth.user!, auth.user!.currentAccessToken.identifier)
return { message: 'Unauthorized' }
}
}
}