2016-07-17 126 views
6

Ho un database con 2 oggetti. Ecco come si presenta:Firebase Angularfire2 verifica se l'utente esiste nel database

users 
    - KEY 
     login: "xexe" 
     password: "123" 

    - KEY 
     login: "dede" 
     password: "123" 

Ora sto controllando se l'utente esiste nel database

constructor(private af: AngularFire) { 
    this.users = af.database.list('/users'); 
    } 

    registerUser(login: string, password: string) { 
    this.af.database.list('/users', { 
     query: { 
     orderByChild: 'login', 
     equalTo: login 
     } 
    }).subscribe(response => { 
     if(response.length === 0) { 
     console.log("User does not exist"); 
     //here i will add a user 
     } else { 
     console.log("Users exists"); 
     } 
    }) 
    } 

Qual è il problema?

Proviamo a registrare un utente con login "dede" (utente dovrebbe esiste)

Quando clicco un pulsante Invia prima volta, la console mostra: Users exists -> beh, questo è un bene.

Il problema è quando clicco il presentare la seconda volta (senza aggiornare pagina web)

Poi mi console.log mostra due messaggi

User does not exist 
User exists 

e che sarebbe aggiungere un nuovo utente ciò che non dovrebbe essere fatto. Perché la seconda volta la funzione di iscrizione esegue iterate su ogni riga? Come sistemarlo?

risposta

9

Piuttosto che utilizzare una query, è possibile strutturare i dati per utilizzare la proprietà login come essi KEY.

{ 
    "users": { 
    "dede": { 
     "login": "dede", 
     "password": "Do not store passwords :)" 
    }, 
    "xexe": { 
     "login": "xexe" 
    } 
    } 
} 

Ora è possibile creare un riferimento a questa posizione e verificare se l'oggetto esiste.

registerUser(login: string, password: string) { 
    const user = this.af.database.object(`users/${login}`); 
    user.subscribe(data => { 
    if(data.$value !== null) { 
     console.log('User does not exist'); 
    } else { 
     console.log('User does exist'); 
    } 
    }); 
} 
+0

Deve essere "if (data. $ Valore! = Null) {', invece di 'if (dati. $ Valore! == null) {'? – alltej

+0

Sto usando angularFire2. Questo controllo per l'oggetto non sembra funzionare. – alltej

+0

anche io devo fare questo '' const user = this.af.database.object ('users/$ {login}', {preserveSnapshot: true}); '' per farlo funzionare e usare 'data.val () 'per valutare – alltej