2017-02-20 1 views
1

(VERWENDUNG VON IONIC SERVE IM BROWSER) Wenn sich ein Benutzer in meiner App anmeldet, wird eine Verbindung zur Datenbank hergestellt und einige vorläufige Daten werden mit ihrer ID eingefügt. Das funktioniert gut. Das Problem kommt, wenn Sie sich abmelden und dann wieder anmelden, wenn es wieder zu verbinden versucht, es sagt:IonicDB ungültiger Handshake beim erneuten Herstellen der Verbindung nach dem Trennen

"Connection Failed: Invalid handshake." 

Wenn ich mich wieder auslogge und die App aktualisieren, und dann melden Sie sich dann funktioniert es ok. Ich denke, dass etwas in den Auth oder Datenbank-Providern einen Wert von vor dem Abmelden hält, weshalb die Verbindung für den neuen Benutzer fehlschlägt. Ich habe mir den lokalen Speicher in Chrome Dev angeschaut und alles außer "ionic_insights_session" wird gelöscht, wenn ich mich auslogge. Also ich weiß nicht, was das Problem ist. Ein paar Code-Snippets für Sie:

Wenn sich ein Benutzer anmeldet:

this.auth.signup(details).then(() => { 
    this.auth.login('basic', details).then(() => { 
     this.db.connect(); 
     this.doneLoading(); 
     this.navCtrl.setRoot(GuidePage, {'justSignedUp': true}, {'animate': true, 'direction': 'forward'}) 
    }, err => { 
     this.doneLoading(); 
     this.showErrPopup("Check your internet connection"); 
    }); 
} 

diese sie an der Führungsseite sendet, wo:

ionViewDidLoad() { 
    if (this.navParams.data.justSignedUp) { 
    var points = this.db.collection("points"); 
    points.insert({ 
     id: this.user.id, 
     points: 9000 
    }); 
    } 
} 

Und schließlich abzumelden:

logout() { 
    this.auth.logout(); 
    this.db.disconnect(); 
    this.navCtrl.setRoot(StartPage, null, {'animate': true, 'direction': 'back'}); 
} 

Wie bereits erwähnt, wenn ich abmelde und dann den Browser aktualisieren, funktioniert es gut. Jede Hilfe wäre toll Prost

Antwort

0

Sieht aus wie IonicDB ist nicht mehr. Das ist also kein Problem mehr, denke ich!

+0

Technisch die richtige Antwort. Die beste Art von richtig :) –

0

Ich habe das gleiche Problem, wahrscheinlich rufen wir zu früh die Funktion, die die Daten erhalten oder veröffentlichen, ich arbeite daran. Ich denke, wir können das schaffen, indem wir eine Promise-Funktion verwenden.

+0

Lass mich wissen, wie es dir geht. Ich habe versucht, die Verbindungs-und Verbindungsfunktionen an verschiedenen Orten immer noch mit dem gleichen Problem aufrufen – mab3103

+0

Sorry, ich sage es mir schlecht ... Ich denke, dass wir versuchen, zu früh auf die entfernte Datenbank zu verbinden. –

0

Ich nehme an, dass der Login-Prozess der ionischen Wolke einige Zeit dauern, so dass ich eine Funktion schreiben, zu erkennen, wenn der Benutzer angemeldet ist.

login() { 
    let checkStatus = new Promise((resolve, reject)=>{ 
    Observable.interval(500).subscribe(()=>{ 
     if(this.auth.isAuthenticated()){ //Check every 500 ms the auth status 
     resolve(); 
     } 
     }) 
    }); 
    checkStatus.then(()=>{ 
     this.db.connect(); 
    }); 
} 

auch Denken Sie daran, osservable zu importieren

import {Observable} from 'rxjs/Rx'; 

In Ihrem Code müssen Sie diese Funktion anstelle von this.db.connect() anrufen

+0

Ich werde morgen einen Blick darauf werfen und sehen, wie es funktioniert. Danke für die Antworten! – mab3103

Verwandte Themen