Next.js Discord

Discord Forum

When changing email it logs out the user

Unanswered
Bombay posted this in #help-forum
Open in Discord
BombayOP
I'm trying to create change the email functionality but every time i change the email it logs out the user from the session. I use next-auth, how can i fix this?

1 Reply

BombayOP
import { redirect } from "next/navigation";
import { NextRequest, NextResponse } from "next/server";
import prisma from "@/lib/prismadb";
import getCurrentUser from "@/actions/getCurrentUser";

export async function GET(
  _request: NextRequest,
  {
    params,
  }: {
    params: {
      token: string;
    };
  }
) {
  // Get the current user
  const currentUser = await getCurrentUser();

  if (!currentUser?.id) {
    return new NextResponse("Unauthorized", { status: 401 });
  }

  const { token } = params;
  const activateToken = await prisma.activateToken.findMany({
    where: {
      userId: {
        equals: currentUser?.id,
      },
    },
  });
  if (
    !activateToken ||
    activateToken.length === 0 ||
    activateToken.slice(-1)[0] === null
  ) {
    return redirect("/settings/account/?errorToast=true");
  }

  if (!activateToken.slice(-1)[0].newUpdatedEmailAccount) {
    return redirect("/settings/account/?errorToast=true");
  }

  if (activateToken.slice(-1)[0].activatedAt) {
    return redirect("/settings/account/?errorToast=true");
  }

  // check if token expired
  if (activateToken.slice(-1)[0].createdAt) {
    // Check if the token is older than 24 hours
    const createdAtDate = new Date(activateToken.slice(-1)[0].createdAt);
    const currentDate = new Date();
    const timeDifference = currentDate.getTime() - createdAtDate.getTime();
    if (timeDifference > 24 * 60 * 60 * 1000) {
      return new NextResponse("The token is expired.", { status: 401 });
    }
  }
  await prisma.user.update({
    where: {
      id: currentUser.id,
    },
    data: {
      active: true,
      email: activateToken.slice(-1)[0].newUpdatedEmailAccount,
    },
  });
  await prisma.activateToken.update({
    where: {
      token,
    },
    data: {
      activatedAt: new Date(),
    },
  });
  return redirect("/settings/account/?successToast=true");
}