import {NextApiRequest, NextApiResponse} from "next"; import {getAuth, signInWithEmailLink} from "firebase/auth"; import {app} from "@/firebase"; import {sessionOptions} from "@/lib/session"; import {withIronSessionApiRoute} from "iron-session/next"; import {doc, getFirestore, setDoc} from "firebase/firestore"; const auth = getAuth(app); const db = getFirestore(app); export default withIronSessionApiRoute(verify, sessionOptions); async function verify(req: NextApiRequest, res: NextApiResponse) { const {link} = req.body as {link: string}; if (req.session.user) { signInWithEmailLink(auth, req.session.user.email, link) .then(async () => { const userRef = doc(db, "users", req.session.user!.id); await setDoc(userRef, {isVerified: true}, {merge: true}); req.session.user = {...req.session.user!, isVerified: true}; await req.session.save(); res.status(200).json({ok: true}); }) .catch(() => res.status(404).json({ok: false})); } }