Skip to content

Authentication Hooks

Customize authentication behavior globally using Nuxt Aegis hooks in server plugins.

Overview

Hooks allow you to intercept and react to authentication events. Unlike Handlers, hooks are primarily for side effects (logging, analytics, notifications) and do not affect the core authentication flow logic.

Available Hooks

nuxt-aegis:success

Called after successful authentication.

Use cases:

  • Log authentication events
  • Send analytics
  • Save or update user records in your database
  • Trigger notifications or webhooks
  • Track login counts

Payload:

typescript
{
  providerUserInfo: Record<string, unknown> // Transformed user object
  tokens: {
    access_token: string
    refresh_token?: string
    id_token?: string
    expires_in?: number
  }
  provider: string                   // 'google', 'github', 'auth0', etc.
  event: H3Event                     // Server event context
}

Example:

typescript
// server/plugins/aegis.ts
export default defineNitroPlugin((nitroApp) => {
  nitroApp.hooks.hook('nuxt-aegis:success', async (payload) => {
    console.log('User authenticated:', payload.providerUserInfo.email)
    
    // Update last login timestamp
    await db.users.update(payload.providerUserInfo.id, {
      lastLogin: new Date()
    })
  })
})

nuxt-aegis:impersonate:start

Called after an impersonation session has successfully started.

Use cases:

  • Audit logging (who impersonated whom)
  • Security monitoring
  • Triggering alerts

Payload:

typescript
{
  requester: BaseTokenClaims    // The admin user
  targetUser: BaseTokenClaims   // The user being impersonated
  reason?: string               // Reason provided for impersonation
  timestamp: Date               // When it started
  ip: string                    // Client IP
  userAgent: string             // Client User Agent
  event: H3Event                // Server event context
}

Example:

typescript
nitroApp.hooks.hook('nuxt-aegis:impersonate:start', async (payload) => {
  console.log(`[AUDIT] ${payload.requester.email} started impersonating ${payload.targetUser.email}`)
})

nuxt-aegis:impersonate:end

Called after an impersonation session has ended (user reverted to original identity).

Use cases:

  • Audit logging
  • Session duration tracking

Payload:

typescript
{
  restoredUser: BaseTokenClaims     // The admin user (restored)
  impersonatedUser: BaseTokenClaims // The user who was impersonated
  timestamp: Date
  ip: string
  userAgent: string
  event: H3Event
}

Example:

typescript
nitroApp.hooks.hook('nuxt-aegis:impersonate:end', async (payload) => {
  console.log(`[AUDIT] Impersonation ended for ${payload.impersonatedUser.email}`)
})

Use cases:

  • Log authentication events
  • Save or update user records in your database
typescript
// server/plugins/aegis.ts
export default defineNitroPlugin((nitroApp) => {
  nitroApp.hooks.hook('nuxt-aegis:success', async (payload) => {
    console.log('Login success:', payload.providerUserInfo.email)
  })
})

Released under the MIT License.