Zugriff auf E-Mail-Adresse in Firebase-Regeln [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Wie können wir garantieren, dass die vom Firebase-Benutzer gespeicherte E-Mail tatsächlich seine eigene E-Mail ist? 1 Antwort

Ich verwende Firebase 3. Beim Schreiben von Firebase-Regeln enthält das Auth-Objekt nur die UID und den Provider. Gibt es eine Möglichkeit, dies zu verbessern, um auch die E-Mail-Adresse anzugeben?

Das Problem, das ich zu lösen versuche, besteht darin, dass der Eigentümer der Website, an der ich arbeite, Benutzern basierend auf ihrer E-Mail-Adresse die Erlaubnis erteilen möchte, da er ihre Firebase-UID im Voraus nicht kennt.

Ich habe Lösungen dafür gefunden, die vorschlagen, das Benutzerobjekt in der Firebase (mit der E-Mail) beizubehalten und dann als Referenzpunkt in den Regeln zu verwenden. Das Problem dabei ist, dass es ziemlich einfach ist, den Code zu debuggen und die E-Mail-Adresse vor dem Speichern in Firebase zu manipulieren, wenn jemand die E-Mail-Adresse eines Benutzers mit vollständigen Berechtigungen kennt. Dies bedeutet, dass die Firebase gespeichert wird ID neben der E-Mail-Adresse einer anderen Person.

Die einzige Möglichkeit, dies sicher zu machen, besteht darin, die E-Mail-Adresse im auth-Objekt in den Firebase-Regeln anzugeben, die nicht gehackt werden können.

Habe ich etwas verpasst?

MEHR INF

Die Idee ist, dass wir den Zugriff auf Daten für einen bestimmten Standort steuern können, indem wir den Standortnamen der E-Mail-Adresse eines Benutzers hinzufügen:

Ein Benutzer wird vom Site-Manager im Voraus manuell erstellt und ermöglicht den Zugriff auf eine Teilmenge von Daten. z.
-users
  -user1Email
    -locations
      -someLocation:true
      -someOtherLocation:true

Der Nutzer authentifiziert sich über Google. Auf der Clientseite können wir ihre E-Mail-Adresse in auth.user.email @ sehe

In den Regeln möchte ich so etwas wie

locations : {
  "$location": {
      ".read": "root.hasChild('users/' + auth.email + '/locations/' + $location)",
   }
}

Ich weiß, dass ich der E-Mail-Adresse entkommen muss, nur um es vorerst einfach zu halten.

Ich habe dies im Simulator getestet und es funktioniert einwandfrei, wenn ich einen benutzerdefinierten Anbieter verwende und die E-Mail dort bereitstelle, aber mit Google hat das "auth" in der Regel nur UID- und Anbietereigenschaften, keine E-Mail.

Die Alternative (anders als die Verwendung eines benutzerdefinierten Anbieters) besteht darin, dem Benutzer zuerst die Erstellung seines Kontos zu ermöglichen. Anschließend werden die Standorte jedem Benutzer mit seiner UID als Schlüssel und nicht mit seiner E-Mail-Adresse hinzugefügt, aber der Eigentümer möchte dies können Stellen Sie es so ein, dass es beim ersten Anmelden sofort angezeigt wird.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage