Auth.js (NextAuth)
O login por e-mail (magic link) do Auth.js enviado pela API da Postal.
No Auth.js (NextAuth), o login por e-mail (magic link) usa um provedor de e-mail. Este provedor envia pela API da Postal. Não há conexão para criar.
#Chave e remetente
Crie uma chave só de envio em Chaves de API, guarde em POSTAL_API_KEY e use um remetente de um domínio verificado.
#O provedor
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],
})
Os links de verificação são guardados pelo adapter. Para usar um template da Postal, troque html e text por template: { id, variables: { URL: url } }.