refactor: Use AuthUser fragment for login / swithcTo
All checks were successful
Deploy WordPress and Nuxt / deploy (push) Successful in 1m0s

This commit is contained in:
2025-09-18 12:47:13 -04:00
parent 48c8454f2a
commit 1cea2fe9f8
5 changed files with 24 additions and 13 deletions

View File

@@ -3,8 +3,7 @@ mutation login($email: String!, $password: String!) {
authToken
refreshToken
user {
id
email
...AuthUser
}
}
}

View File

@@ -3,8 +3,7 @@ mutation switchTo($userId: ID!) {
authToken
refreshToken
user {
id
email
...AuthUser
}
}
}

View File

@@ -0,0 +1,9 @@
fragment AuthUser on User {
id
email
roles {
nodes {
name
}
}
}

View File

@@ -1,6 +1,7 @@
import type { LoginRootMutation, SwitchToRootMutation } from "#graphql-operations";
import type { LoginRootMutation, SwitchToRootMutation, AuthUserFragment } from "#graphql-operations";
import type { H3Event } from "h3";
import { pick } from "es-toolkit/compat";
import type { User } from "#auth-utils";
export async function handleLogin(event: H3Event, loginData?: LoginRootMutation) {
if (!loginData?.login?.user) {
@@ -8,10 +9,7 @@ export async function handleLogin(event: H3Event, loginData?: LoginRootMutation)
}
const { authToken, refreshToken, user } = loginData.login;
await setUserSession(event, {
user: {
id: user.id,
email: user.email,
},
user: getAuthUser(user),
secure: {
authToken,
refreshToken,
@@ -32,10 +30,7 @@ export async function handleSwitchTo(event: H3Event, data?: SwitchToRootMutation
const session = await getUserSession(event);
const { authToken, refreshToken, user } = data.switchTo;
await setUserSession(event, {
user: {
id: user.id,
email: user.email,
},
user: getAuthUser(user),
secure: {
authToken,
refreshToken,
@@ -63,3 +58,11 @@ export async function handleSwitchBack(event: H3Event) {
isSwitchedTo: false,
});
}
function getAuthUser(user: AuthUserFragment): User {
return {
id: Number(user.id),
email: user.email!,
roles: user.roles?.nodes.map(({ name }) => name!) || [],
};
}

View File

@@ -3,6 +3,7 @@ declare module "#auth-utils" {
interface User {
id: number;
email: string;
roles: string[];
}
interface UserSession {