Skip to content

Commit 486b415

Browse files
committed
feat(auth): expose internal utils for SSR
1 parent a3c64a2 commit 486b415

File tree

3 files changed

+34
-10
lines changed

3 files changed

+34
-10
lines changed

Diff for: src/auth/index.ts

+28-7
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ export function VueFireAuth(initialUser?: _Nullable<User>): VueFireModule {
7777
/**
7878
* Key to be used to inject the auth instance into components. It allows avoiding to call `getAuth()`, which isn't tree
7979
* shakable.
80+
* @internal
8081
*/
8182
export const _VueFireAuthKey = Symbol('VueFireAuth')
8283

@@ -91,17 +92,37 @@ export function VueFireAuthWithDependencies({
9192
initialUser,
9293
}: VueFireAuthOptions): VueFireModule {
9394
return (firebaseApp: FirebaseApp, app: App) => {
94-
const user = getGlobalScope(firebaseApp, app).run(() =>
95-
ref<_Nullable<User>>(initialUser)
96-
)!
97-
// this should only be on client
98-
authUserMap.set(firebaseApp, user)
99-
const auth = initializeAuth(firebaseApp, dependencies)
100-
app.provide(_VueFireAuthKey, auth)
95+
const [user, auth] = _VueFireAuthInit(
96+
firebaseApp,
97+
app,
98+
initialUser,
99+
dependencies
100+
)
101101
setupOnAuthStateChanged(user, auth)
102102
}
103103
}
104104

105+
/**
106+
* initializes auth for both the server and client.
107+
* @internal
108+
*/
109+
export function _VueFireAuthInit(
110+
firebaseApp: FirebaseApp,
111+
app: App,
112+
initialUser: _Nullable<User>,
113+
dependencies: AuthDependencies
114+
) {
115+
const user = getGlobalScope(firebaseApp, app).run(() =>
116+
ref<_Nullable<User>>(initialUser)
117+
)!
118+
// TODO: Is it okay to have it both server and client?
119+
authUserMap.set(firebaseApp, user)
120+
const auth = initializeAuth(firebaseApp, dependencies)
121+
app.provide(_VueFireAuthKey, auth)
122+
123+
return [user, auth] as const
124+
}
125+
105126
/**
106127
* Retrieves the Firebase Auth instance. **Returns `null` on the server**. When using this function on the client in
107128
* TypeScript, you can force the type with `useFirebaseAuth()!`.

Diff for: src/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,9 @@ export {
9090
type VueFireAuthOptions,
9191
VueFireAuth,
9292
VueFireAuthWithDependencies,
93+
_VueFireAuthInit,
9394
useFirebaseAuth,
95+
_VueFireAuthKey,
9496
getCurrentUser,
9597
updateCurrentUserProfile,
9698
} from './auth'

Diff for: src/server/auth.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { FirebaseApp } from 'firebase/app'
2-
import type { User } from 'firebase/auth'
2+
import { type User } from 'firebase/auth'
33
import type { DecodedIdToken, UserRecord } from 'firebase-admin/auth'
44
import { App, ref } from 'vue'
55
import { authUserMap, _setInitialUser } from '../auth/user'
@@ -9,6 +9,7 @@ import type { App as AdminApp } from 'firebase-admin/app'
99
import { getAuth as getAdminAuth } from 'firebase-admin/auth'
1010
import { logger } from './logging'
1111
import { isFirebaseError } from './utils'
12+
import { _VueFireAuthKey } from '../auth'
1213

1314
// MUST be named `__session` to be kept in Firebase context, therefore this name is hardcoded
1415
// https://firebase.google.com/docs/hosting/manage-cache#using_cookies
@@ -21,10 +22,10 @@ export const AUTH_COOKIE_NAME = '__session'
2122
export function VueFireAuthServer(
2223
firebaseApp: FirebaseApp,
2324
app: App<unknown>,
24-
userRecord: _Nullable<User>
25+
initialUser: _Nullable<User>
2526
) {
2627
const user = getGlobalScope(firebaseApp, app).run(() =>
27-
ref<_Nullable<User>>(userRecord)
28+
ref<_Nullable<User>>(initialUser)
2829
)!
2930
authUserMap.set(firebaseApp, user)
3031
_setInitialUser(firebaseApp, user)

0 commit comments

Comments
 (0)