[SwiftUI Firebase] Login with Anonymous

Woozoo·2023년 4월 6일

[SwiftUI Firebase]

목록 보기
4/14

Anonymous로 로그인하게 됐을 때 유저가 다른 로그인으로 전환을 시도할 경우에
authentication을 다시 받는 게 아니라 다른 로그인을 연결해주는 느낌임
기본적으로 credential auth는 한번만 받는다!!

익명 로그인 추가!



크게 다른 건 없다 더 간단함!

그리고 AuthDataResultModel에 user.isAnonymous 데이터가 넘겨지게 해줌

지금까지는 괜찮은데
여기서 만약에 익명 로그인을 로그아웃하고 다시 익명 로그인하게 된다고 생각해보셈
어떻게 될까?
익명 계정이 하나 더 생성이 됨
그래서 할 수 있는 건 그냥 익명일 땐 로그아웃이 안되게 해주는 거!! ㅋㅋㅋ


Anonymous 계정이랑 기존 계정 (구글 로그인이나 애플 로그인) 연결 하는 거 해봅시다

link 하는 과정은 signIn할 때랑 거의 유사하다고 생각하면 됨
credential가지고 연결해주는겨

//MARK: - Sign in Anonymous

extension AuthenticationManager {
    
    @discardableResult
    func signInAnonymous() async throws -> AuthDataResultModel {
        let authDataResult = try await Auth.auth().signInAnonymously()
        return AuthDataResultModel(user: authDataResult.user)
    }
    
    func linkEmail(email: String, password: String) async throws -> AuthDataResultModel {
        let credential = EmailAuthProvider.credential(withEmail: email, password: password)
        
        return try await linkCredential(credential: credential)
    }
    
    func linkApple(tokens: SignInWithAppleResult) async throws -> AuthDataResultModel {
        let credential = OAuthProvider.credential(withProviderID: AuthProviderOption.apple.rawValue, idToken: tokens.token, rawNonce: tokens.nonce)
        return try await linkCredential(credential: credential)
    }
    
    func linkGoogle(tokens: GoogleSignInResultModel) async throws -> AuthDataResultModel {
        let credential = GoogleAuthProvider.credential(withIDToken: tokens.idToken, accessToken: tokens.accessToken)
        return try await linkCredential(credential: credential)
    }
    
    private func linkCredential(credential: AuthCredential) async throws -> AuthDataResultModel {
        guard let user = Auth.auth().currentUser else {
            throw URLError(.badURL)
        }
        let authDataResult = try await user.link(with: credential)
        return AuthDataResultModel(user: authDataResult.user)
    }
    
}


익명 로그인했을 때 보여지는 뷰가 다르게 처리해봅시다


AuthUser를 받을 수 있게 해줌



AuthenticationManager에서 만들었던 link 메소드들로 Settings ViewModel의 메소드들 구성해줬음

처리가끝나면 뷰모델이 들고있는 authUser한테 값이 넘겨지게 해주고!

잘 되나 실행해보면 error가 뜨는 걸 볼 수 있음
credential이 이미 있다고함

그니까 익명 로그인 한 계정의 credential이 있을거고,
구글로 이전에 로그인한 흔적의 credential이 있을겨
이미 있어서 안된다고 하는겨

기존 구글 계정 콘솔에서 삭제하고 다시 링크 해보면 잘됩니다


profile
우주형

0개의 댓글