Iniciar sesión Crear cuenta
Integraciones

Auth.js (NextAuth)

El inicio de sesión por correo electrónico (magic link) de Auth.js enviado por la API de Postal.

En Auth.js (NextAuth), el inicio de sesión por correo electrónico (magic link) usa un proveedor de correo electrónico. Este proveedor envía por la API de Postal. No hay ninguna conexión que crear.

#Clave y remitente

Crea una clave solo de envío en Claves de API, guárdala en POSTAL_API_KEY y usa un remitente de un dominio verificado.

#El proveedor

auth.ts
import NextAuth from 'next-auth'
import type { EmailConfig } from 'next-auth/providers'

const Postal: EmailConfig = {
  id: 'postal',
  type: 'email',
  name: 'E-mail',
  from: 'Minha empresa <[email protected]>',
  maxAge: 24 * 60 * 60,
  options: {},
  async sendVerificationRequest({ identifier, url, provider }) {
    const response = await fetch('https://api.postal.so/emails', {
      method: 'POST',
      headers: { Authorization: `Bearer ${process.env.POSTAL_API_KEY}`, 'Content-Type': 'application/json' },
      body: JSON.stringify({
        from: provider.from,
        to: [identifier],
        subject: 'Seu link de acesso',
        html: `<p><a href="${url}">Entrar</a></p><p>O link vale por 24 horas.</p>`,
        text: `Entre pelo link: ${url}`,
      }),
    })

    if (!response.ok) {
      throw new Error(`Postal respondeu ${response.status}`)
    }
  },
}

export const { handlers, auth, signIn, signOut } = NextAuth({
  // O login por e-mail precisa de um adapter de banco (Prisma, Drizzle...).
  // adapter: PrismaAdapter(prisma),
  providers: [Postal],
})

Los enlaces de verificación los guarda el adapter. Para usar una plantilla de Postal, cambia html y text por template: { id, variables: { URL: url } }.