2017-12-11 2 views
2

Ich arbeite an einer eckigen App und verwende Firebase, um meine Benutzer zu authentifizieren. Ich würde gerne wissen, wie ich verhindern könnte, dass meine Benutzer ihren Account anderen Leuten geben. Ich möchte auch verhindern, dass Benutzer dasselbe Konto verwenden, um sich von verschiedenen Geräten gleichzeitig anzumelden. Ich habe einige sehr gute Tutorials gefunden, um ein Anwesenheitssystem zu erstellen, aber dieses System verhindert nicht, dass dasselbe Konto von vielen verschiedenen Leuten auf verschiedenen Geräten benutzt wird. Ich konnte überprüfen, ob ein Benutzer versucht, ein Konto zu verwenden, das bereits verwendet wird (online), aber ich kann es nicht schaffen, einen dieser Benutzer abzumelden (mit einem alreaydy Online-Konto ..). Ich habe versucht, auth.signout() in der signInwithemailAndPassword() -Methode aufzurufen, aber es funktioniert nicht, es gelingt mir nicht, die Benutzer abzumelden. Vielen Dank für Ihre Hilfe. Was ich brauche, ist ein Schnipsel, denn theoretisch ist alles sehr einfach.Firebase: dasselbe Konto auf mehreren Geräten verhindern

Antwort

1

Da Sie nicht angegeben haben, welche Sprache Sie verwenden, werde ich nur Swift verwenden, aber die Prinzipien hinter dem, was ich hier dargelegt habe, sind für alle Sprachen gleich.

Werfen Sie einen Blick auf this question. Es scheint, dass Firebase das, wonach Sie suchen, nicht direkt unterstützt. Sie können jedoch Folgendes tun:

Erstellen Sie einen Baum in Ihrer Datenbank, der einen booleschen Wert für Benutzer-Signs speichert.

SignedIn: { 
    uid1: { 
     "signedIn": true 
    } 
    uid2: { 
     "signedIn": false 
    } 
    ..... 
} 

Ich gehe davon aus, wo einige nach der Authentifizierung Sie den Bildschirm ändern. Sie möchten nun eine zusätzliche Abfrage durchführen, bevor Sie dies tun. Wenn der Benutzer bereits angemeldet ist, können Sie eine Warnmeldung anzeigen, andernfalls können Sie einfach wie gewohnt fortfahren.

func alreadySignedIn() { 
    if let uid = Auth.auth().currentUser?.uid { 
     Database.database().reference().child("SignedIn").child(uid).observeSingleEvent(of: .value, with: { snap in 
      if let dict = snap.value as? [String: Any] { 
       if let signedIn = dict["signedIn"] as? Bool { 
        if signedIn { 
         // display an alert telling the user only one device can use 
         // there account at a time 
        } 
        else { 
         // change the screen like normal 
        } 
       } 
      } 
     }) 
    } 
} 

Natürlich verhindert dies nur, dass das Konto zur gleichen Zeit "freigegeben" wird. Sie können eine strengere Richtlinie festlegen, wenn Sie die Anmeldung nur anhand einer Geräte-ID zulassen. Zum Beispiel könnten Sie get the device id und nur auf diesem Gerät anmelden. Sie müssten Benutzern erlauben, das zu aktualisieren, wenn sie ein neues Gerät erhalten, aber wenn Sie Ihre Konten wirklich sperren möchten, könnte dies eine bessere Option sein.

+0

TY DoesData inspirierte mich, eine Lösung in angular2 zu implementieren – cedric123

Verwandte Themen