2017-09-14 1 views
0

Neuling hier. Was ich versuche zu tun, ist es Benutzern zu erlauben, sich über ihre Telefonnummer zu registrieren, nur wenn ihre Telefonnummern früher vom Administrator hinzugefügt wurden. Jede Hilfe oder Verbindung zu Ressourcen wäre sehr hilfreich. Vielen Dank!Firebase: Registrieren von Benutzern anhand ihrer Telefonnummern, die von admin hinzugefügt wurden

+0

Es kann nicht verhindert werden, dass sich ein Benutzer bei der Firebase-Authentifizierung authentifiziert. Sie können jedoch verhindern, dass sie andere Ressourcen verwenden. Weitere Informationen zur Vorgehensweise für die Firebase-Datenbank finden Sie unter: https://firebase.google.com/docs/database/security/user-security –

+0

Vielen Dank für die Ressource. Von deiner und Alex 'Antwort glaube ich, dass ich diese Idee nicht durchdacht habe. Die Überprüfung von Handynummern vor der Hand führt zu Problemen und sollte nicht durchgeführt werden. Wahrscheinlich sollte ich einfach eine SMS-Bestätigung (über Dritte) schicken, sobald der Administrator eine Handynummer eingibt und den Benutzer auffordert, sich mit diesem Code/Passwort anzumelden und später sein Passwort zu ändern. [bearbeitet: für Lesbarkeit] – user165242

Antwort

1

Grundsätzlich müssten Sie über Ihren Administrator-Account die "guten" Zahlen innerhalb eines Knotens hinzufügen, nennen wir es "white_list" und dessen Verweis whiteListRef.

Dann würden Sie die beiden wesentlichen Methoden Firebase benötigen einen Benutzer über seine Telefonnummer zu registrieren, die erste ist:

PhoneAuthProvider.provider().verifyPhoneNumber(phone_number) { } 

Es wird ein Bestätigungscode an den Benutzer senden.

Dann müssen Sie diese Methode hinzufügen:

Auth.auth().signIn(with: credential) { } 

Berechtigungsnachweis erstellt wird mit dem verificationID Sie von der ersten Methode bekam, und den Bestätigungscode ein, dass die Benutzer auf seine Telefonnummer erhalten, wenn seine Nummer richtig war:

let credential = PhoneAuthProvider.provider().credential(
     withVerificationID: verificationID, 
     verificationCode: verificationCode) 

in Ihrem Fall würden Sie überprüfen müssen, dass die Telefonnummer Ihrer Benutzer in unter der weißen Liste eingegeben ist (dass Ihr Admin in den white_list Knoten hinzugefügt). Abhängig von Ihrer Datenbankstruktur, beispielsweise eine Methode wie diese verwenden:

func checkNumberEligibility(_ phoneNumber: String, completion: @escaping(Bool) -> Void) { 

     whiteListRef.observeSingleEvent(of: .value, with: { (snapshot) in 

     guard let numberEligibility = snapshot.childSnapshot(forPath: "eligibility").value as? String else { return } 

     if numberEligibility == "good" { 
      completion(true) 
     } else { 
      completion(false) 
     } 

    }) 

Schließlich würden Sie so etwas wie dieses:

func registerPhoneNumber(_ phoneNumber: String, completion: @escaping() -> Void) { 

     PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber) { [weak self] (verificationID, error) in 

      guard error == nil else { 
       return 
      } 

     self?.checkNumberEligibility(phoneNumber) { (isNumberOkay) in 

      guard isNumberOkay else { 
       return 
      } 

      UserDefaults.standard.set(verificationID, forKey: "authVerificationID") 

     } 

     } 

    } 


    func verifyCode(_ verificationCode: String, completion: @escaping() -> Void) { 

     guard let verificationID = UserDefaults.standard.string(forKey: "authVerificationID") else { 
      return 
     } 

     let credential = PhoneAuthProvider.provider().credential(
      withVerificationID: verificationID, 
      verificationCode: verificationCode) 

     Auth.auth().signIn(with: credential, completion: { (user, error) in 

      guard error == nil else { 
       return 
      } 

      completion() 

     }) 

    } 

Dies funktionieren würde, aber zu Wenn Sie dies so tun, bedeutet dies, dass Sie den Zugriff über die Datenbankregeln auf diesen Whitelist-Knoten jeder Person (dh auch Nichtbenutzern Ihrer App) gewähren müssen, die Sie möglicherweise Sicherheitsrisiken aussetzt. Sie könnten dies vor der Implementierung dieses Systems berücksichtigen.

Lassen Sie mich wissen, wenn Sie Fragen haben!

+0

Sie haben Recht. Ich dachte nicht an die Sicherheitsprobleme. Die Handynummern würden exponiert bleiben. Danke für die Antwort. Ich habe daraus gelernt. – user165242

+0

Kein Problem, ich bin froh, dass ich helfen konnte – Alex

Verwandte Themen