File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 66//
77
88import Combine
9+ import Foundation
910
1011final class AuthSessionRepositoryImpl : AuthSessionRepository {
1112 private let authService : AuthService
1213 private let userDefaultsStore : UserDefaultsStore
14+ private var cancellables = Set < AnyCancellable > ( )
1315
1416 init ( authService: AuthService , userDefaultsStore: UserDefaultsStore ) {
1517 self . authService = authService
1618 self . userDefaultsStore = userDefaultsStore
1719 self . signIn = authService. uid != nil
20+
21+ authService. signedInPublisher
22+ . removeDuplicates ( )
23+ . receive ( on: DispatchQueue . main)
24+ . sink { [ weak self] signIn in
25+ self ? . setSession ( signIn)
26+ }
27+ . store ( in: & cancellables)
1828 }
1929
2030 @Published private var signIn : Bool = false
Original file line number Diff line number Diff line change @@ -44,16 +44,21 @@ final class AuthenticationRepositoryImpl: AuthenticationRepository {
4444 let providerID = try await authService. getProviderID ( ) ,
4545 let provider = AuthProvider ( rawValue: providerID)
4646 else {
47- throw AuthError . notAuthenticated
47+ try await authService. clearCurrentSession ( )
48+ return
4849 }
4950
50- switch provider {
51- case . apple:
52- try await appleAuthService. signOut ( uid)
53- case . github:
54- try await githubAuthService. signOut ( uid)
55- case . google:
56- try await googleAuthService. signOut ( uid)
51+ do {
52+ switch provider {
53+ case . apple:
54+ try await appleAuthService. signOut ( uid)
55+ case . github:
56+ try await githubAuthService. signOut ( uid)
57+ case . google:
58+ try await googleAuthService. signOut ( uid)
59+ }
60+ } catch AuthError . notAuthenticated {
61+ try await authService. clearCurrentSession ( )
5762 }
5863 }
5964
Original file line number Diff line number Diff line change 55// Created by 최윤진 on 11/29/25.
66//
77
8+ import Combine
89import FirebaseAuth
910import FirebaseFirestore
1011import FirebaseMessaging
@@ -13,15 +14,34 @@ final class AuthService {
1314 private let store = Firestore . firestore ( )
1415 private let messaging = Messaging . messaging ( )
1516 private let logger = Logger ( category: " AuthService " )
17+ private let subject = CurrentValueSubject < Bool , Never > ( Auth . auth ( ) . currentUser != nil )
18+ private var handler : AuthStateDidChangeListenerHandle ?
1619
1720 var uid : String ? {
1821 Auth . auth ( ) . currentUser? . uid
1922 }
2023
24+ var signedInPublisher : AnyPublisher < Bool , Never > {
25+ subject. eraseToAnyPublisher ( )
26+ }
27+
2128 var providerIDs : [ String ] {
2229 Auth . auth ( ) . currentUser? . providerData. map { $0. providerID } ?? [ ]
2330 }
2431
32+ init ( ) {
33+ handler = Auth . auth ( ) . addStateDidChangeListener { [ weak self] _, user in
34+ let signedIn = user != nil
35+ self ? . logger. info ( " Firebase auth state changed. signedIn: \( signedIn) " )
36+ self ? . subject. send ( signedIn)
37+ }
38+ }
39+
40+ deinit {
41+ guard let handler else { return }
42+ Auth . auth ( ) . removeStateDidChangeListener ( handler)
43+ }
44+
2545 func getProviderID( ) async throws -> String ? {
2646 logger. info ( " Fetching current provider ID " )
2747
You can’t perform that action at this time.
0 commit comments