When changing email it logs out the user
Unanswered
Bombay posted this in #help-forum
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");
}