2

Ich möchte verhindern, dass der Benutzername während der Anmeldeform, was Benutzer eingegeben. Ich habe E-Mail-Login wie unten erstellt, zuerst createUser und dann auth setValue mit Benutzerwörterbuch.Wie verhindern Sie, dass der Benutzername sich in Firebase doppelt anmeldet?

Aber ich stapeln mit Firebase Sicherheitseinstellungen und wie Sie diese Situation behandeln.

REF_BASE.createUser(email, password: pwd, withValueCompletionBlock: { .. 

REF_BASE.authUser(email, password: pwd, withCompletionBlock: { .. 

REF_USERS.childByAppendingPath(uid).setValue(user) 

Diese Behandlung immer Antwortfehler.

Dies sind meine Sicherheitsregeln, Wie kann ich alles verhindern, dass doppelte Benutzer verhindert werden?

"users": { 
     ".read": "auth !== null", 
     "$user": { 
      "username": { 
       ".read": "auth !== null", 
       ".write": "newData.val() === auth.uid && !data.exists()" 
      } 
     } 
    }, 

Update:

Von Frank Antwort, aber ich weiß nicht, was ich während SIGNUP neuen Benutzer für eine rasche in dieser Situation tun müssen.

app : { 
    users: { 
     "some-user-uid": { 
      email: "[email protected]" 
      username: "myname" 
     } 
    }, 
    usernames: { 
     "myname": "some-user-uid" 
    } 
} 

Muss ich die gleiche Benutzer-UID zur gleichen Zeit für zwei verschiedene Knoten hinzufügen? Wenn jemand es in Swift erklärt. Es wäre toll.

"users": { 
    "$uid": { 
    ".write": "auth !== null && auth.uid === $uid", 
    ".read": "auth !== null && auth.provider === 'password'", 
    "username": { 
     ".validate": " 
     !root.child('usernames').child(newData.val()).exists() || 
     root.child('usernames').child(newData.val()).val() == $uid" 
    } 
    } 
} 

I keine neuen Benutzer Informationen zu Benutzernamen übergeordneten Knoten hinzufügen könnte. Es ist eine andere Sicherheitsregeln erforderlich?

+0

Welchen Fehler bekommen Sie genau? –

+0

Ich bekomme, [Firebase] setValue: oder removeValue: at/users/8372c890-112d-4a75-924c-98814ea15963/Benutzername fehlgeschlagen: permission_denied – tobeiosdev

+0

Erster Punkt ist Ihre zweite .read Regel ist veraltet, weil [Regeln Kaskade] (https : //www.firebase.com/docs/security/guide/securing-data.html#section-cascade). Und für den Fehler bin ich nicht ganz sicher, aber es sieht so aus, als ob Sie versuchen, einen Benutzer in firebase zu schreiben, und in Ihren Regeln erlauben Sie nur den Wert als UID (newData.val() === auth.guid) –

Antwort

0

Wenn Sie versuchen, doppelte Firebase Benutzernamen zu verhindern, kann dies direkt in der Phase createUser erfolgen.

Angenommen, ein neuer Benutzer wird gefragt, ob er ein Konto erstellen möchte: Dies wird den gewünschten Benutzernamen und das Passwort erhalten.

dass create senden und wenn ein Fehler ist (da er bereits vorhanden) teilen sie und fragen Sie nach einem anderen Namen:

myRootRef.createUser(email, password: pw, withValueCompletionBlock: { error, result in 

     if error != nil { 
      self.errMsgField.stringValue = "email/username in use, try again" 

     } else { 
      let uid = result["uid"] as! String //the uid of the new user 
      print("user created as \(uid)") 
      self.authUserWithAuthData(email, password: pw) //auth the user 
     } 
    }) 

Nachdem der Benutzer Sie wahrscheinlich ihre Info-Knoten des/Benutzer hinzufügen würden erstellt auch.