Swift 5 & Firebase: создание общих кнопок входа и выхода - PullRequest
0 голосов
/ 19 марта 2020

Я подумал, что вернусь в StackOverflow с другим вопросом, потому что вы, ребята, значительно помогли мне с моей последней проблемой

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

Я хочу, чтобы она работала так:

  • Если адрес электронной почты занят, я хочу, чтобы отображалось предупреждение поскольку пользователь говорит «Неверный пароль»
  • Если адрес электронной почты не занят, я хочу, чтобы он сообщил пользователю, что ему нужно ввести пароль, состоящий как минимум из 10 символов, 1 цифры и 1 специального символа, который я уже выяснил, используя
  • Я только хочу, чтобы он попытался создать нового пользователя, если электронная почта не получена, а поле пароля и электронной почты соответствуют полям критериев, которые я уже установил в моем код. Мне просто нужна помощь, чтобы он не переключался на создание нового пользователя V C, если электронное письмо уже занято, и мне нужно сказать


    func isValidPassword(_ email: String) -> Bool {
        let emailRegEx = "@#$%^&+=^.*(?=.{10,})(?=.*d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$"
        let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
        return emailPred.evaluate(with: email)
    }
    

В любом случае, вот код, прикрепленный к IBAction

if let email = emailField.text, let password = passwordField.text {
            Auth.auth().signIn(withEmail: email, password: password, completion:
                { (user,error) in
                    if error == nil {
                        if let user = user {
                            self.userUid = user.user.uid
                            self.goToFeedVC()
                        }
                    } else {
                        self.goToCreateUserVC()

Вот изображение интерфейса

Я хочу, чтобы оно было интуитивно понятным, но у меня есть Я не мог написать это сам, поэтому, если кто-нибудь сможет помочь мне посоветовать, как закончить sh этот блок, он будет невероятно признателен

1 Ответ

1 голос
/ 19 марта 2020

Firebase дает довольно подробные ответы об ошибках для их вызова Auth: так что вы можете проверить, что ошибка внутри вашего вызова: ниже приведены две ошибки, которые они дают (я добавил только два сценария ios, которые вы упомянули )

Описание: пароль недействителен или у пользователя нет пароля.

FIRAuthErrorUserInfoNameKey: ERROR_WRONG_PASSWORD

&

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

FIRAuthErrorUserInfoNameKey: ERROR_USER_NOT_FOUND

Auth.auth().signIn(withEmail: email, password: password, completion:
    { (user,error) in
        if error == nil {
            if let user = user {
                self.userUid = user.user.uid
                self.goToFeedVC()
            }
        } else {
            guard let error = error?.localizedDescription else { return } // but actually handle this
            print(error)
            if error == wrong password {
                // show alert for email taken/wrong password
            } else if error == user doesnt exists {
                // self.goToCreateUserVC()
            }
     }
}

Просто замените условия if и else if фактическими ошибками. Я бы не стал сравнивать строки и использовать ключ / код в случае, если строки изменятся в будущем.

Официальный список кодов ошибок можно найти здесь А если вы напечатаете полный error вместо error?.localizedDescription вы получите полную информацию, как можно увидеть здесь:

Optional(Error Domain=FIRAuthErrorDomain Code=17011 "There is no user record corresponding to this identifier. The user may have been deleted." UserInfo={NSLocalizedDescription=There is no user record corresponding to this identifier. The user may have been deleted., FIRAuthErrorUserInfoNameKey=ERROR_USER_NOT_FOUND})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...