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
JavaScript
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);
}
});