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 authToken
refreshToken refreshToken
user { user {
id ...AuthUser
email
} }
} }
} }

View File

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

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