@@ -16,6 +16,7 @@ final class AuthService {
1616 private let logger = Logger ( category: " AuthService " )
1717 private let subject = CurrentValueSubject < Bool , Never > ( Auth . auth ( ) . currentUser != nil )
1818 private var handler : AuthStateDidChangeListenerHandle ?
19+ private var isCompletingSignIn = false
1920
2021 var uid : String ? {
2122 Auth . auth ( ) . currentUser? . uid
@@ -27,9 +28,16 @@ final class AuthService {
2728
2829 init ( ) {
2930 handler = Auth . auth ( ) . addStateDidChangeListener { [ weak self] _, user in
31+ guard let self else { return }
3032 let signedIn = user != nil
31- self ? . logger. info ( " Firebase auth state changed. signedIn: \( signedIn) " )
32- self ? . subject. send ( signedIn)
33+ self . logger. info ( " Firebase auth state changed. signedIn: \( signedIn) " )
34+
35+ if signedIn && self . isCompletingSignIn {
36+ self . logger. info ( " Delaying signed-in publication until user bootstrap finishes " )
37+ return
38+ }
39+
40+ self . subject. send ( signedIn)
3341 }
3442 }
3543
@@ -42,6 +50,24 @@ final class AuthService {
4250 subject. eraseToAnyPublisher ( )
4351 }
4452
53+ func beginSignIn( ) {
54+ logger. info ( " Beginning sign-in bootstrap " )
55+ isCompletingSignIn = true
56+ subject. send ( false )
57+ }
58+
59+ func completeSignIn( ) {
60+ logger. info ( " Completing sign-in bootstrap " )
61+ isCompletingSignIn = false
62+ subject. send ( Auth . auth ( ) . currentUser != nil )
63+ }
64+
65+ func cancelSignIn( ) {
66+ logger. info ( " Cancelling sign-in bootstrap " )
67+ isCompletingSignIn = false
68+ subject. send ( Auth . auth ( ) . currentUser != nil )
69+ }
70+
4571 func getProviderID( ) async throws -> String ? {
4672 logger. info ( " Fetching current provider ID " )
4773
0 commit comments