Skip to content

Resend Provider

Workers Auth integrates with Resend for sending magic link emails. Resend offers a generous free tier and a clean API, making it the recommended email provider.

Sign up at resend.com and verify your sending domain.

In the Resend dashboard, go to API Keys and create a new key.

Terminal window
wrangler secret put RESEND_API_KEY
import { ResendProvider } from 'workers-auth/providers/resend';
ResendProvider({
apiKey: process.env.RESEND_API_KEY!,
from: 'auth@yourdomain.com',
});
OptionTypeDescription
apiKeystringYour Resend API key
fromstringSender email address (must be from a verified domain)
import { MagicLinkStrategy } from 'workers-auth/authn/magic-link';
import { ResendProvider } from 'workers-auth/providers/resend';
import { defaultTemplate } from 'workers-auth/templates/default';
MagicLinkStrategy({
provider: ResendProvider({
apiKey: process.env.RESEND_API_KEY!,
from: 'auth@yourdomain.com',
}),
template: defaultTemplate,
});

The Resend provider implements the EmailProvider interface:

interface EmailProvider {
send(options: {
to: string;
subject: string;
html: string;
}): Promise<void>;
}

To use a different email service (SendGrid, Mailgun, AWS SES, etc.), implement EmailProvider:

import type { EmailProvider } from 'workers-auth';
const sendgridProvider: EmailProvider = {
async send({ to, subject, html }) {
await fetch('https://api.sendgrid.com/v3/mail/send', {
method: 'POST',
headers: {
Authorization: `Bearer ${SENDGRID_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
personalizations: [{ to: [{ email: to }] }],
from: { email: 'auth@yourdomain.com' },
subject,
content: [{ type: 'text/html', value: html }],
}),
});
},
};

Pass your custom provider to MagicLinkStrategy:

MagicLinkStrategy({
provider: sendgridProvider,
template: defaultTemplate,
});