Untitled-1import {HttpContextContract} from '@ioc:Adonis/Core/HttpContext'; import {AccessToken, toAccessToken} from '../models/AccessToken'; import User from '../models/User'; interface Credentials { email: string; password: string; } export interface AccessTokenService { generate(user: User): Promise<AccessToken>; revoke(): Promise<void>; attempt(credentials: Credentials): Promise<AccessToken>; } interface Dependencies { auth: HttpContextContract['auth']; } export function getAccessTokenService({ auth, }: Dependencies): AccessTokenService { async function generate(user: User): Promise<AccessToken> { const token = await auth.use('api').generate(user, { expiresIn: '7 days', }); return toAccessToken(token.toJSON()); } async function revoke(): Promise<void> { await auth.use('api').revoke(); } async function attempt({email, password}: Credentials): Promise<AccessToken> { const token = await auth.use('api').attempt(email, password, { expiresIn: '7 days', }); return toAccessToken(token.toJSON()); } return { generate, revoke, attempt, }; } Usage in controller: Untitled-1export class AuthController { async logout({response, auth}: HttpContextContract) { const accessTokenService = getAccessTokenService({auth}); const result = await logout({accessTokenService}).execute(); if (E.isLeft(result)) { return response.badRequest({message: 'Something went wrong'}); } return response.noContent(); } } Back to Snippets