2016-06-27 15 views
5

Sono bloccato con la verifica e-mail con Firebase. Mi sono guardato intorno per trovare una guida ma nessun aiuto. Dopo che l'utente ha verificato la sua email, il mio codice stampa ancora che l'utente non è stato verificato. Sto ancora cercando di abituarmi alla sintassi di Firebase. Qui è il mio codice:Come verificare l'indirizzo email di un utente su iOS con Firebase?

if FIRAuth.auth()?.currentUser!.emailVerified == true{ 
    FIRAuth.auth()?.signInWithEmail(email.text!, password: passsword.text!, completion: { 
     user, error in 

     if error != nil{ 
      print("Email/password is wrong or user does not exist") 
     }else{ 
      print("Successful login.") 
     } 
    }) 
}else{ 
    print("Please verify your email.") 
} 

Ecco il mio codice per il segno di sezione:

let eduEmail = email.text 
    let endInEdu = eduEmail?.hasSuffix("my.utsa.edu") 

    if endInEdu == true { 

     FIRAuth.auth()?.createUserWithEmail(email.text!, password: passsword.text!, completion: { 
      user, error in 

      if error != nil{ 
       let alert = UIAlertController(title: "User exists.", message: "Please use another email or sign in.", preferredStyle: UIAlertControllerStyle.Alert) 
       alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil)) 
       self.presentViewController(alert, animated: true, completion: nil) 

       print("Email has been used, try a different one") 
       }else{ 

FIRAuth.auth()?.currentUser!.sendEmailVerificationWithCompletion({ (error) in 
         }) 


       let alert = UIAlertController(title: "Account Created", message: "Please verify your email by confirming the sent link.", preferredStyle: UIAlertControllerStyle.Alert) 
       alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil)) 
       self.presentViewController(alert, animated: true, completion: nil) 








       print("This is a college email and user is created") 




      } 


     }) 


    }else{ 
     print("This is not a my.utsa.edu email") 
     } 
+1

Ehi Gesù! Benvenuto in StackOverflow. Vi consiglio vivamente di impostare un titolo di domanda più descrittivo. – adolfosrs

+0

Stai chiamando sendEmailVerification su currentUser e poi fai clic sul link di verifica email che viene inviato via email? – bojeil

+0

Sì, lo sono. È nel mio file del controller della vista di registrazione. Una volta registrato, invia automaticamente l'e-mail quando crea l'account – jesusnieto5413

risposta

1

Si utilizza l'operatore coalescenza dopo FIRAuth.auth() il che significa che il metodo seguente chiamata tornerà nil quando FIRAuth.auth() era pari a zero . In questo caso, il confronto con true avrà esito negativo, poiché nil non è true.

vi consiglio di refactoring del codice come questo per facilitare il debug:

guard let auth = FIRAuth.auth(), user = auth.currentUser else { 
    print("No auth/user") 
} 

guard user.emailVerified else { 
    print("Email not verified") 
    return 
} 

guard let email = email.text, password = passsword.text else { 
    print("No email or password") 
    return 
} 

auth.signInWithEmail(email, password: password) { user, error in 
    if let error = error { 
     print("Email/password is wrong or user does not exist, error: \(error)") 
    } else { 
     print("Successful login.") 
    } 
} 

Si dovrebbe trovare il vostro errore più facile in questo modo.

+0

Ho ancora lo stesso "Email non è verificato" anche dopo aver verificato l'e-mail. – jesusnieto5413

+0

@ jesusnieto5413 Allora qualcosa è andato storto sul lato firebase, non posso aiutarti più di quello – Kametrixom

+0

@ jesusnieto5413 hai trovato la soluzione? , Ho lo stesso problema. Faccio la verifica ma ancora EmailRisultati restituiti falsi. – EhsanR

9

Hai controllato se l'e-mail dell'utente è stata verificata anche prima di loro l'accesso.

Questo è ciò che ha funzionato per me.

FIRAuth.auth()?.signInWithEmail(txtUsername.text!, password: txtPassword.text!) { 
     (user, error) in 
     if let user = FIRAuth.auth()?.currentUser { 
      if !user.emailVerified{ 
       let alertVC = UIAlertController(title: "Error", message: "Sorry. Your email address has not yet been verified. Do you want us to send another verification email to \(self.txtUsername.text).", preferredStyle: .Alert) 
       let alertActionOkay = UIAlertAction(title: "Okay", style: .Default) { 
        (_) in 
         user.sendEmailVerificationWithCompletion(nil) 
       } 
       let alertActionCancel = UIAlertAction(title: "Cancel", style: .Default, handler: nil) 

       alertVC.addAction(alertActionOkay) 
       alertVC.addAction(alertActionCancel) 
       self.presentViewController(alertVC, animated: true, completion: nil) 
      } else { 
       print ("Email verified. Signing in...") 
      } 
     } 
    } 
+0

Grazie che ha funzionato come fascino –