nuxt-supabase-team-auth
Version:
Drop-in Nuxt 3 module for team-based authentication with Supabase
39 lines (38 loc) • 1.45 kB
JavaScript
import { createError } from "h3";
export async function createSessionFromMagicLink(adminClient, email, metadata) {
try {
console.log(`[MagicLinkSession] Generating magic link for ${email}`);
const { data: magicLinkData, error: magicLinkError } = await adminClient.auth.admin.generateLink({
type: "magiclink",
email,
options: metadata ? { data: metadata } : void 0
});
if (magicLinkError || !magicLinkData.properties?.hashed_token) {
console.error("[MagicLinkSession] Failed to generate magic link:", magicLinkError);
throw createError({
statusCode: 500,
message: "Failed to generate authentication link"
});
}
console.log("[MagicLinkSession] Magic link generated, verifying OTP...");
const { data: sessionData, error: verifyError } = await adminClient.auth.verifyOtp({
token_hash: magicLinkData.properties.hashed_token,
type: "magiclink"
});
if (verifyError || !sessionData.session) {
console.error("[MagicLinkSession] Failed to verify OTP:", verifyError);
throw createError({
statusCode: 500,
message: "Failed to create authentication session"
});
}
console.log("[MagicLinkSession] Session created successfully");
return {
session: sessionData.session,
user: sessionData.user
};
} catch (error) {
console.error("[MagicLinkSession] Unexpected error:", error);
throw error;
}
}