Add hook to expose uid (#5612)

* add hook to expose uid

* use whenever for cleaner code
This commit is contained in:
Christian Byrne
2025-09-16 14:42:40 -07:00
committed by GitHub
parent 71ca28a46f
commit 6786d8e4fb
4 changed files with 46 additions and 1 deletions

View File

@@ -1,3 +1,4 @@
import { whenever } from '@vueuse/core'
import { computed } from 'vue'
import { useFirebaseAuthActions } from '@/composables/auth/useFirebaseAuthActions'
@@ -6,6 +7,7 @@ import { useDialogService } from '@/services/dialogService'
import { useApiKeyAuthStore } from '@/stores/apiKeyAuthStore'
import { useCommandStore } from '@/stores/commandStore'
import { useFirebaseAuthStore } from '@/stores/firebaseAuthStore'
import type { AuthUserInfo } from '@/types/authTypes'
export const useCurrentUser = () => {
const authStore = useFirebaseAuthStore()
@@ -20,6 +22,27 @@ export const useCurrentUser = () => {
() => !!isApiKeyLogin.value || firebaseUser.value !== null
)
const resolvedUserInfo = computed<AuthUserInfo | null>(() => {
if (isApiKeyLogin.value && apiKeyStore.currentUser) {
return { id: apiKeyStore.currentUser.id }
}
if (firebaseUser.value) {
return { id: firebaseUser.value.uid }
}
return null
})
const onUserResolved = (callback: (user: AuthUserInfo) => void) => {
if (resolvedUserInfo.value) {
callback(resolvedUserInfo.value)
}
const stop = whenever(resolvedUserInfo, callback)
return () => stop()
}
const userDisplayName = computed(() => {
if (isApiKeyLogin.value) {
return apiKeyStore.currentUser?.name
@@ -112,8 +135,10 @@ export const useCurrentUser = () => {
userPhotoUrl,
providerName,
providerIcon,
resolvedUserInfo,
handleSignOut,
handleSignIn,
handleDeleteAccount
handleDeleteAccount,
onUserResolved
}
}

View File

@@ -1,3 +1,4 @@
import { useCurrentUser } from '@/composables/auth/useCurrentUser'
import { useErrorHandling } from '@/composables/useErrorHandling'
import { useSettingStore } from '@/platform/settings/settingStore'
import { api } from '@/scripts/api'
@@ -72,6 +73,13 @@ export const useExtensionService = () => {
}
})()
}
if (extension.onAuthUserResolved) {
const { onUserResolved } = useCurrentUser()
onUserResolved((user) => {
void extension.onAuthUserResolved?.(user, app)
})
}
}
/**

View File

@@ -7,3 +7,7 @@ export type ApiKeyAuthHeader = {
}
export type AuthHeader = LoggedInAuthHeader | ApiKeyAuthHeader
export interface AuthUserInfo {
id: string
}

View File

@@ -7,6 +7,7 @@ import type { ComfyNodeDef } from '@/schemas/nodeDefSchema'
import type { ComfyApp } from '@/scripts/app'
import type { ComfyWidgetConstructor } from '@/scripts/widgets'
import type { ComfyCommand } from '@/stores/commandStore'
import type { AuthUserInfo } from '@/types/authTypes'
import type { BottomPanelExtension } from '@/types/extensionTypes'
type Widgets = Record<string, ComfyWidgetConstructor>
@@ -166,5 +167,12 @@ export interface ComfyExtension {
missingNodeTypes: MissingNodeType[]
): Promise<void> | void
/**
* Fired whenever authentication resolves, providing the anonymized user id..
* Extensions can register at any time and will receive the latest value immediately.
* This is an experimental API and may be changed or removed in the future.
*/
onAuthUserResolved?(user: AuthUserInfo, app: ComfyApp): Promise<void> | void
[key: string]: any
}