fix(auth): avoid cabinet redirect loop and use teams access token

This commit is contained in:
Ruslan Bakiev
2026-04-21 12:55:19 +07:00
parent 351125b51d
commit 7b4eaeeb92
2 changed files with 17 additions and 8 deletions

View File

@@ -12,8 +12,10 @@ export default defineNuxtRouteMiddleware(async (to) => {
} }
const { loggedIn } = useAuth() const { loggedIn } = useAuth()
const localePath = useLocalePath()
const logtoUser = useState<Record<string, unknown> | null>('logto-user', () => null)
if (!loggedIn.value) { if (!loggedIn.value && !logtoUser.value) {
return navigateTo('/sign-in') return navigateTo(localePath('/sign-in'))
} }
}) })

View File

@@ -32,14 +32,21 @@ export default defineEventHandler(async (event) => {
const client = event.context.logtoClient as LogtoClient | undefined const client = event.context.logtoClient as LogtoClient | undefined
if (!client) return if (!client) return
let idToken: string | null = null const logtoUser = event.context.logtoUser as { organizations?: string[] } | undefined
const organizationId = event.context.logtoOrgId || logtoUser?.organizations?.[0]
let token: string | null = null
try { try {
idToken = await client.getIdToken() token = await client.getAccessToken('https://teams.optovia.ru', organizationId)
} catch {
try {
token = await client.getIdToken()
} catch { } catch {
return return
} }
}
if (!idToken) return if (!token) return
try { try {
const { GetMeDocument, GetMeProfileDocument } = await import('~/composables/graphql/user/teams-generated') const { GetMeDocument, GetMeProfileDocument } = await import('~/composables/graphql/user/teams-generated')
@@ -48,12 +55,12 @@ export default defineEventHandler(async (event) => {
const [meResponse, profileResponse] = await Promise.all([ const [meResponse, profileResponse] = await Promise.all([
$fetch<{ data?: { me?: MePayload } }>(endpoint, { $fetch<{ data?: { me?: MePayload } }>(endpoint, {
method: 'POST', method: 'POST',
headers: { Authorization: `Bearer ${idToken}` }, headers: { Authorization: `Bearer ${token}` },
body: { query: print(GetMeDocument) } body: { query: print(GetMeDocument) }
}), }),
$fetch<{ data?: { me?: MePayload } }>(endpoint, { $fetch<{ data?: { me?: MePayload } }>(endpoint, {
method: 'POST', method: 'POST',
headers: { Authorization: `Bearer ${idToken}` }, headers: { Authorization: `Bearer ${token}` },
body: { query: print(GetMeProfileDocument) } body: { query: print(GetMeProfileDocument) }
}) })
]) ])