Проверка электронной почты Firebase не работает должным образом, без проверки пользователь может войти - PullRequest
0 голосов
/ 23 октября 2019

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

мой код

@IBAction func loginBtnTapped(_ sender: Any) {

    SVProgressHUD.show()
    guard let email = emailTxt.text,
        let password = passwordTxt.text else { return }

    Auth.auth().signIn(withEmail: email, password: password) { 
(user, error) in
        if error != nil {
            let alert = UIAlertController(title: "Login Error", 
message:"Incorrect Email and/or Password", preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "OK", style: 
.default) { _ in })
            self.present(alert, animated: true){}
            if let error = error {
                print("error: \(error.localizedDescription)")
            }
           if Auth.auth().currentUser?.isEmailVerified == false {
                let alert = UIAlertController(title: "Unable to 
login", message:"Pending: email verification", preferredStyle: 
.alert)
                alert.addAction(UIAlertAction(title: "OK", style: 
.default) { _ in })
                self.present(alert, animated: true){}
                print("")
            SVProgressHUD.dismiss()
            }
        }
            self.dismiss(animated: true, completion: nil)
            SVProgressHUD.dismiss()
        }
    }

Ожидаемые результаты

Недавно созданный пользователь не сможет войти в систему и открыть приложениеесли адрес электронной почты не подтвержден.

Ответы [ 3 ]

0 голосов
/ 23 октября 2019

Аутентификация Firebase - это около аутентификации пользователей. Если вы введете (скажем) правильный адрес электронной почты и пароль, мы уверены, что вы - это вы.

Если вы хотите разрешить доступ к данным только тем пользователям, которые подтвердили свой адрес электронной почты, это возможно (и называется авторизация ). Вы проверите это в бэкэнде, который вы пытаетесь защитить, хотя, например, в правилах безопасности вашей базы данных Firestore, как показано здесь (Firebase) Правила безопасности Firestore - разрешить, если электронная почта проверена без пользовательских токенов?

Также см.

0 голосов
/ 24 октября 2019

вам нужно проверить в базе данных firebase поле, в котором написано «проверено электронной почтой», а затем, если это значение BOOL равно TRUE, тогда впустите их в приложение. значение bool автоматически изменится на TRUE после того, как они нажмут на ссылку в своем электронном письме. поэтому вместо того, чтобы делать это, как у вас, сделайте запрос к таблице пользователей для этого пользователя и проверьте логическое значение на предмет того, проверены ли они, если нет, то не впускайте их. удачи и замечательного дня

0 голосов
/ 23 октября 2019

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

Как правило, вы можете использовать sendSignInLinkToEmail () для отправки сообщения проверки адреса электронной почты с определенным URL-адресом. Пользователь будет автоматически перенаправлен на этот URL после проверки адреса электронной почты.

В нашем случае мы предлагаем пользователю создать пароль, а затем активировать его учетную запись, прежде чем перенаправить его на экран входа в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...