mirror of
https://github.com/wassname/Open-Assistant.git
synced 2026-07-26 13:07:22 +08:00
Merge branch 'main' into 766_admin_enhancement
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -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 });
|
||||
}
|
||||
Reference in New Issue
Block a user