fix(auth): avoid cabinet redirect loop and use teams access token
This commit is contained in:
@@ -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'))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -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 {
|
} catch {
|
||||||
return
|
try {
|
||||||
|
token = await client.getIdToken()
|
||||||
|
} catch {
|
||||||
|
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) }
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|||||||
Reference in New Issue
Block a user