用户无需验证电子邮件即可登录(Swift,Firebase)

时间:2019-08-08 23:24:00

标签: swift firebase firebase-authentication

我做了以下登录功能:

 @objc func handleSignIn() {
    guard let email = emailField.text else { return }
    guard let pass = passwordField.text else { return }
Auth.auth().signIn(withEmail: email, password: pass) { user, error in
            if error == nil && user != nil && (user!.user.isEmailVerified){
                self.dismiss(animated: false, completion: nil)
            }; if user != nil && !(user?.user.isEmailVerified)! {
                self.lblStatus.text = "Please Verify Your Email"
            }
            else {
                self.lblStatus.text = "Error logging in: \(error!.localizedDescription)"
                resetForm()
            }
        }

尽管我尝试使用&& (user!.user.isEmailVerified)规定来防止这种情况,但用户仍可以登录而无需验证电子邮件。我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

完成登录仅表示用户标识了自己,并且您知道哪个帐户代表了他们选择的身份。登录并不意味着可以授权对该帐户执行任何操作,除了更新其个人资料信息外。

您会注意到这里存在一些鸡肉和鸡蛋问题。登录必须成功完成才能获得User对象,并且该用户对象具有指示其电子邮件是否已通过验证的属性。因此,如果您想读取该属性,则必须允许登录。

从理论上讲,如果用户尚未验证,则可以立即将其注销,但是这样做可以防止他们要求再次发送电子邮件验证(如果他们删除了第一个或无法验证)。已交付。因此,现在您只有一个烦恼的用户,无法采取任何措施来解决问题。

如果要阻止用户在经过验证的其他Firebase产品中进行任何操作,则应使用安全规则来阻止不应允许的任何读写访问。您可以在规则中检查电子邮件验证标志。考虑使用auth.token.emailVerifiedExample for Realtime Database here.