From c2f4fd26d43702cf9f2a2c5e837fbc826eedf788 Mon Sep 17 00:00:00 2001 From: Keiichiro Amemiya Date: Sat, 10 Feb 2024 14:51:52 +0900 Subject: [PATCH] verify email change --- src/app/routes/_base.verify-email-change.tsx | 61 ++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/app/routes/_base.verify-email-change.tsx diff --git a/src/app/routes/_base.verify-email-change.tsx b/src/app/routes/_base.verify-email-change.tsx new file mode 100644 index 0000000..38d0e87 --- /dev/null +++ b/src/app/routes/_base.verify-email-change.tsx @@ -0,0 +1,61 @@ +import { Text } from "@radix-ui/themes"; +import type { LoaderFunctionArgs } from "@remix-run/node"; + +import { prisma } from "../../shared/prisma.server"; +import { CenterLayout } from "../components/center-layout"; +import { assertSession } from "../session.server"; + +export const loader = async ({ request }: LoaderFunctionArgs) => { + const session = await assertSession(request); + + const url = new URL(request.url); + const token = url.searchParams.get("token"); + + if (!token) { + throw new Response("token missing", { status: 400 }); + } + + const emailChange = await prisma.userEmailChange.findUnique({ + where: { + token, + userId: session.user.id, + }, + select: { + id: true, + email: true, + }, + }); + + if (!emailChange) { + throw new Response("invalid token", { status: 400 }); + } + + await prisma.userEmailChange.delete({ + where: { id: emailChange.id }, + }); + + await prisma.user.update({ + where: { + id: session.user.id, + }, + data: { + email: emailChange.email, + }, + }); + + return null; +}; + +export default () => ( + + Eメールアドレスを変更しました + +); + +export const ErrorBoundary = () => { + return ( + + エラーが発生しました + + ); +};