32 lines
No EOL
771 B
JavaScript
32 lines
No EOL
771 B
JavaScript
// server/api/auth/login.post.js
|
|
import jwt from 'jsonwebtoken'
|
|
import Member from '~/server/models/member'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const { email } = await readBody(event)
|
|
|
|
const member = await Member.findOne({ email })
|
|
if (!member) {
|
|
throw createError({ statusCode: 404 })
|
|
}
|
|
|
|
// Send magic link via Resend
|
|
const token = jwt.sign(
|
|
{ memberId: member._id },
|
|
process.env.JWT_SECRET,
|
|
{ expiresIn: '7d' }
|
|
)
|
|
|
|
await resend.emails.send({
|
|
from: 'Ghost Guild <noreply@ghostguild.org>',
|
|
to: email,
|
|
subject: 'Your Ghost Guild login link',
|
|
html: `
|
|
<a href="https://ghostguild.org/auth/verify?token=${token}">
|
|
Click here to log in
|
|
</a>
|
|
`
|
|
})
|
|
|
|
return { success: true }
|
|
}) |