mirror of
https://github.com/xCyanGrizzly/DragonsStash.git
synced 2026-05-11 06:11:15 +00:00
Fix first user not getting ADMIN role when signing up via OAuth
The createUser event in auth.ts now promotes the first user to ADMIN if no admin exists yet. The JWT callback also fetches the role from the database on sign-in to pick up the freshly assigned ADMIN role. Co-authored-by: xCyanGrizzly <53275238+xCyanGrizzly@users.noreply.github.com>
This commit is contained in:
@@ -18,7 +18,12 @@ export const { auth, handlers, signIn, signOut } = NextAuth({
|
|||||||
async jwt({ token, user }) {
|
async jwt({ token, user }) {
|
||||||
if (user) {
|
if (user) {
|
||||||
token.id = user.id!;
|
token.id = user.id!;
|
||||||
token.role = user.role ?? "USER";
|
// Fetch the role from the database to pick up first-user ADMIN promotion
|
||||||
|
const dbUser = await prisma.user.findUnique({
|
||||||
|
where: { id: user.id! },
|
||||||
|
select: { role: true },
|
||||||
|
});
|
||||||
|
token.role = dbUser?.role ?? user.role ?? "USER";
|
||||||
}
|
}
|
||||||
return token;
|
return token;
|
||||||
},
|
},
|
||||||
@@ -33,6 +38,18 @@ export const { auth, handlers, signIn, signOut } = NextAuth({
|
|||||||
events: {
|
events: {
|
||||||
async createUser({ user }) {
|
async createUser({ user }) {
|
||||||
if (user.id) {
|
if (user.id) {
|
||||||
|
// First user to register becomes ADMIN (self-hosted owner)
|
||||||
|
const adminExists = await prisma.user.findFirst({
|
||||||
|
where: { role: "ADMIN" },
|
||||||
|
select: { id: true },
|
||||||
|
});
|
||||||
|
if (!adminExists) {
|
||||||
|
await prisma.user.update({
|
||||||
|
where: { id: user.id },
|
||||||
|
data: { role: "ADMIN" },
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
await prisma.userSettings.upsert({
|
await prisma.userSettings.upsert({
|
||||||
where: { userId: user.id },
|
where: { userId: user.id },
|
||||||
update: {},
|
update: {},
|
||||||
|
|||||||
Reference in New Issue
Block a user