soc_site-astro/src/auth.ts
Jorge Vargas 4cafc41b88
Some checks failed
/ build (push) Failing after 4m43s
Implement Discord linking
2025-03-21 11:35:03 -06:00

42 lines
1.4 KiB
TypeScript

import { betterAuth } from 'better-auth'
import { prismaAdapter } from 'better-auth/adapters/prisma'
import { username, bearer } from 'better-auth/plugins'
import { DISCORD_OAUTH_ID, DISCORD_OAUTH_SECRET } from 'astro:env/server'
import prismaClient from './utils/prisma-client'
import { sendEmail } from './utils/email'
import forgorTemplate from './utils/forgorTemplate'
import verifyTemplate from './utils/verifyTemplate'
export const auth = betterAuth({
database: prismaAdapter(prismaClient, { provider: 'mysql' }),
user: { modelName: 'users' },
plugins: [username(), bearer()],
account: {
accountLinking: {
enabled: true,
allowDifferentEmails: true
}
},
socialProviders: {
discord: {
clientId: DISCORD_OAUTH_ID,
clientSecret: DISCORD_OAUTH_SECRET,
scope: ['identify', 'email', 'guilds.members.read']
}
},
emailVerification: {
sendOnSignUp: true,
autoSignInAfterVerification: true,
async sendVerificationEmail({ user, url }) {
await sendEmail(user.email, 'Verify your email address', verifyTemplate.replaceAll('{{verify_link}}', url))
}
},
emailAndPassword: {
enabled: true,
requireEmailVerification: true,
sendResetPassword: async ({ user, url, token }, request) => {
await sendEmail(user.email, 'Reset your password', forgorTemplate.replaceAll('{{forgor_link}}', url))
}
}
})