UNPKG

nuxt-users

Version:

A comprehensive user management module for Nuxt 3 and Nuxt 4 applications with authentication, authorization, database support, and CLI tools

43 lines (42 loc) 2.12 kB
import { defineEventHandler, getQuery, sendRedirect } from "h3"; import { useRuntimeConfig } from "#imports"; import { confirmUserEmail } from "../../services/registration.js"; export default defineEventHandler(async (event) => { try { const { nuxtUsers } = useRuntimeConfig(); const options = nuxtUsers; const query = getQuery(event); if (!query.token || !query.email) { const redirectUrl = new URL(options.emailConfirmationUrl, "http://localhost"); redirectUrl.searchParams.set("status", "error"); redirectUrl.searchParams.set("message", "Token and email are required"); return sendRedirect(event, redirectUrl.pathname + redirectUrl.search, 302); } const token = String(query.token); const email = String(query.email); const success = await confirmUserEmail(token, email, options); if (success) { const redirectUrl = new URL(options.emailConfirmationUrl, "http://localhost"); redirectUrl.searchParams.set("status", "success"); redirectUrl.searchParams.set("message", "Email confirmed successfully! Your account is now active. You can now log in."); return sendRedirect(event, redirectUrl.pathname + redirectUrl.search, 302); } else { const redirectUrl = new URL(options.emailConfirmationUrl, "http://localhost"); redirectUrl.searchParams.set("status", "error"); redirectUrl.searchParams.set("message", "Invalid or expired confirmation token"); return sendRedirect(event, redirectUrl.pathname + redirectUrl.search, 302); } } catch (error) { console.error("[Nuxt Users] Email confirmation error:", error); const { nuxtUsers } = useRuntimeConfig(); const options = nuxtUsers; const redirectUrl = new URL(options.emailConfirmationUrl, "http://localhost"); redirectUrl.searchParams.set("status", "error"); if (error instanceof Error) { redirectUrl.searchParams.set("message", error.message); } else { redirectUrl.searchParams.set("message", "Email confirmation failed"); } return sendRedirect(event, redirectUrl.pathname + redirectUrl.search, 302); } });