Merge branch 'main' into 766_admin_enhancement

This commit is contained in:
notmd
2023-01-20 23:08:59 +07:00
83 changed files with 2770 additions and 449 deletions
+17 -3
View File
@@ -7,6 +7,7 @@ import CredentialsProvider from "next-auth/providers/credentials";
import DiscordProvider from "next-auth/providers/discord";
import EmailProvider from "next-auth/providers/email";
import prisma from "src/lib/prismadb";
import { generateUsername } from "unique-username-generator";
const providers: Provider[] = [];
@@ -90,6 +91,7 @@ export const authOptions: AuthOptions = {
async session({ session, token }) {
session.user.role = token.role;
session.user.isNew = token.isNew;
session.user.name = token.name;
return session;
},
/**
@@ -97,10 +99,11 @@ export const authOptions: AuthOptions = {
* This let's use forward the role to the session object.
*/
async jwt({ token }) {
const { isNew, role } = await prisma.user.findUnique({
const { isNew, name, role } = await prisma.user.findUnique({
where: { id: token.sub },
select: { role: true, isNew: true },
select: { name: true, role: true, isNew: true },
});
token.name = name;
token.role = role;
token.isNew = isNew;
return token;
@@ -110,7 +113,18 @@ export const authOptions: AuthOptions = {
/**
* Update the user's role after they have successfully signed in
*/
async signIn({ user, account }) {
async signIn({ user, account, isNewUser }) {
if (isNewUser && account.provider === "email") {
await prisma.user.update({
data: {
name: generateUsername(),
},
where: {
id: user.id,
},
});
}
// Get the admin list for the user's auth type.
const adminForAccountType = adminUserMap.get(account.provider);
+20
View File
@@ -0,0 +1,20 @@
import { withoutRole } from "src/lib/auth";
import prisma from "src/lib/prismadb";
/**
* Updates the user's `name` field in the `User` table.
*/
const handler = withoutRole("banned", async (req, res, token) => {
const { username } = req.body;
const { name } = await prisma.user.update({
where: {
id: token.sub,
},
data: {
name: username,
},
});
res.json({ name });
});
export default handler;
-20
View File
@@ -1,20 +0,0 @@
import { getSession } from "next-auth/react";
import prisma from "src/lib/prismadb";
// POST /api/post
// Required fields in body: title
// Optional fields in body: content
export default async function handle(req, res) {
const { username } = req.body;
const session = await getSession({ req });
const result = await prisma.user.update({
where: {
email: session.user.email,
},
data: {
name: username,
},
});
res.json({ name: result.name });
}