Как обращаться с пользователем после регистрации?

#swift #firebase-authentication #swiftui

# #swift #firebase-аутентификация #swiftui

Вопрос:

Мне нужно зарегистрировать моего пользователя как с помощью аутентификации по телефону, так и с помощью аутентификации по электронной почте. Я успешно выполнил оба. Однако, учитывая то, как я структурировал свой код, это немного ненадежно.

После того, как пользователь регистрируется со своим номером телефона, он автоматически входит в систему. Но прежде чем они получат доступ к приложению, мне нужно, чтобы они также зарегистрировались по своей электронной почте, но я не могу этого сделать, пока они не войдут в систему со своего телефона.

 Group {
        
        if (self.session.session != nil) {
            
            if user?.metadata.creationDate != user?.metadata.lastSignInDate {
                
                AppView()
                
            } else {
                
                EmailRegisterView()
                
            }

        } else {
        
            OnBoardingView()
        
        }
        
        
    }.onAppear(perform: {
        
        session.listen()
        
    })
 

С помощью имеющегося у меня кода, если пользователь по какой-либо причине выйдет из своей учетной записи в тот же день, когда он ее создал, он снова попадет в EmailRegisterView(), что вызовет проблемы.

Есть ли другой способ перенаправить пользователей на EmailRegisterView(), только если они новые пользователи, и как только они закончат там, отправьте их в AppView()?

Вот мой код для аутентификации по телефону…

 func phoneRegister () {
    
    let credential = PhoneAuthProvider.provider().credential(withVerificationID: self.verificationCode, verificationCode: self.code)
                              
    Auth.auth().signIn(with: credential) { (result, error) in
                                  
        if error != nil{
                                      
            self.alertMessage = (error?.localizedDescription)!
            self.alert.toggle()
            return
        }
        
        
        UserDefaults.standard.set(true, forKey: "status")
                                  
        NotificationCenter.default.post(name: NSNotification.Name("statusChange"), object: nil)
    }
}
 

Комментарии:

1. Вы начинаете с открытой фигурной скобки и заканчиваете закрытой круглой скобкой?

2. @ElTomato не могли бы вы уточнить

3. Упс. Моя ошибка… Мои извинения…

Ответ №1:

Похоже, вы можете добавить ключ к пользовательскому умолчанию и проверять значение каждый раз, когда пользователь открывает приложение. Если bool-ключ userdefault, скажем, IsUserRegistered, не существует или имеет значение false, то вы переходите на страницу входа / страницу регистрации и устанавливаете ключ в true. В противном случае, если для ключа установлено значение true, вы просто отобразите начальный вид.