create-auth-js-boiler
Version:
Create a new auth-js-boiler project
65 lines (53 loc) • 1.63 kB
text/typescript
"use server";
import bcrypt from "bcryptjs";
import { auth } from "@/auth"; // Import the new `auth()` function
import { prisma } from "@/lib/prisma";
import { SettingsSchemaType } from "@/schemas/settings.schema";
export const settings = async (values: SettingsSchemaType) => {
const { user } = await auth(); // Use the new `auth()` function to get the current user
if (!user) {
return { error: "Unauthorized" };
}
const dbUser = await prisma.user.findUnique({
where: { id: user.id },
});
if (!dbUser) {
return { error: "Unauthorized" };
}
if (user.isOAuth) {
values.email = undefined;
values.password = undefined;
values.newPassword = undefined;
values.isTwoFactorEnabled = undefined;
}
if (values.password && values.newPassword && dbUser.password) {
const passwordsMatch = await bcrypt.compare(
values.password,
dbUser.password,
);
if (!passwordsMatch) {
return { error: "Incorrect password!" };
}
const hashedPassword = await bcrypt.hash(values.newPassword, 10);
values.password = hashedPassword;
values.newPassword = undefined;
}
const updatedUser = await prisma.user.update({
where: { id: dbUser.id },
data: {
...values,
},
});
// Custom session update logic using `auth()`
const session = await auth();
if (session && session.user) {
session.user = {
...session.user,
name: updatedUser.name,
email: updatedUser.email,
isTwoFactorEnabled: updatedUser.isTwoFactorEnabled,
role: updatedUser.role,
};
}
return { success: "Settings Updated!" };
};