2016-07-15 4 views
0

Ich arbeite gerade an der Ionic 2-App mit dem Parse Server-Backend.Aktueller Benutzer wird beim erneuten Laden einer App nicht gespeichert (Ionic2 + Parse Server)

Ich habe den Prozess der Anmeldung implementiert. Keine Probleme hier, alles funktioniert wie erwartet: neues Konto wird erstellt, Benutzer ist nach der Anmeldung angemeldet und der aktuelle Benutzer existiert.

Jetzt möchte ich den aktuellen Benutzer verwenden und Anmelde-/Anmeldeseite umgehen, wenn der Benutzer das nächste Mal die App öffnet (wenn der Benutzer bereits angemeldet ist). Die Parse-Dokumentation besagt eindeutig:

"Es wäre störend, wenn der Benutzer sich jedes Mal anmelden musste, wenn sie Ihre App öffnen. Sie können dies vermeiden, indem Sie das zwischengespeicherte aktuelle Parse.User-Objekt verwenden. Jedes Mal, wenn Sie eine Anmeldung verwenden oder Methoden anmelden, wird der Benutzer in localstorage zwischengespeichert.“

In meinem Fall kann ich jedoch nicht verwalten, damit es funktioniert. Ich schaffe aktuellen Benutzerdokumentation während Initialisierung der App Analysiert nach:

var currentUser = Parse.User.current(); 
if (currentUser) {  
    // do stuff with the user 
} else {  
    // show the signup or login page 
} 

Jedes Mal, wenn ich die App nach dem erfolgreichen Zeichen öffnen der aktuelle Benutzer NULL ist.

Irgendwelche Ideen?

Antwort

0

Ich verstehe irgendwie, was los ist, verstehe aber immer noch nicht warum.

Während der Anmeldung oder der Anmeldung sollte Parse den aktuellen Benutzer im lokalen Speicher speichern. Wenn jedoch lokaler Speicher aus irgendeinem Grund nicht verfügbar ist, wird er in der Speicherzuordnung gespeichert. Und genau das passiert in meinem Fall: Parse speichert den aktuellen Benutzer immer in der Memory Map, was temporärer Speicher ist. Jedes Mal, wenn ich die App neu lade, ist die Parse-Speicherzuordnung leer. Ich verstehe nicht, warum Parse in meiner Umgebung entscheidet, dass lokaler Speicher nicht verfügbar ist. Ich konnte nicht in dem Code finden, wo diese Entscheidung getroffen wird. Es scheint mir, dass Memory Map Standard ist (was wahrscheinlich nicht wahr ist). Könnte es sein, dass die lokale Speicherfunktionalität in der Open Source-Version von Parse noch nicht implementiert ist? Oder hat es etwas mit Ionic2-Implementierung zu tun?

Gibt es jemanden aus dem Parse-Team, der mit diesem Teil des Parse-Codes vertraut ist?

Danke.

+0

Nach etwas mehr graben, fand heute dieses Blog-Post: https://github.com/ParsePlatform/parse-server/wiki/Compatibility-with-Hosted-Parse Es ist wie aktuelle Benutzer Funktionalität scheint, ist wirklich nicht vollständig in Parse Server implementiert. Muss nach einer anderen Lösung suchen. – nad

0

Hallo ich benutze lokalen Speicher.

import { Component } from '@angular/core'; 
import { NavController,Alert,Storage,LocalStorage } from 'ionic-angular'; 
import {HomePage} from'../home/home'; 
import {UserdetailPage} from'../userdetail/userdetail'; 
declare var require:any; 
var Parse = require('parse/node'); 

@Component({ 
    templateUrl: 'build/pages/user/user.html', 
}) 
export class UserPage { 
    public currentUser:any; 
    public local:any; 
    username:string=""; 
    password:string=""; 
    repassword: string=""; 
    sign:string = "SIGN IN"; 

    constructor(private nav: NavController) { 
    Parse.initialize(XXXXX); 
    Parse.serverURL = 'XXXXXX'; 
    this.local = new Storage(LocalStorage); 
    this.currentUser = this.local.get('userid'); 
    console.log(this.currentUser); 
    } 
    signin(){ 
    console.log("username:"+this.username); 
    console.log("password:"+this.password); 
    if(this.username!="" &&this.password!=""){ 
     if(this.repassword!=""){ 
     // Register User Session 
     this.register(); 
     } 
     else if(this.repassword==""&&this.username!=""&&this.password!=""){ 
     this.login(); 
     } 
    } 
    } 

    changeSign(s:string){ 
    console.log(s); 
    if(s!="") 
    this.sign = "SIGN UP (Register New Account)"; 
    else 
    this.sign ="SIGN IN"; 
    } 
    register(){ 
     if(this.repassword==this.password){ 
      var parseuser = new Parse.User(); 
      parseuser.set("username",this.username); 
      parseuser.set("password",this.password); 
      parseuser.signUp(null, { 
       success:user=>this.registerSucessAlert(), 
       error: error=>this.registerFailAlert("Register Fail, The user name exists or Server is down") 
      }); 
     } 
     else{ 
      this.registerFailAlert("Password is not the same"); 
     } 
    } 

    login(){ 
     console.log("Login"); 
     Parse.User.logIn(this.username, this.password, { 
      success:user=>this.loginSucessAlert(), 
      error:error=>this.loginFailAlert() 
     }); 
    } 

    loginSucessAlert(){ 
    this.currentUser = Parse.User.current().id; 
    this.local.set('userid',this.currentUser); 
     let alert = Alert.create({ 
     title:'Login', 
     subTitle:'Hi '+this.username+', Press to Continue.', 
     buttons:[{text:'OaaaK', 
     handle:()=>{this.nav.setRoot(UserdetailPage);}}] 
     }); 
     this.nav.present(alert); 
    } 
    loginFailAlert(){ 
     let alert = Alert.create({ 
     title:'Login', 
     subTitle:'Login Error', 
     buttons:['OK'] 
     }); 
     this.nav.present(alert); 
    } 
    registerSucessAlert(){ 
    this.currentUser = Parse.User.current().id; 

    this.local.set('userid',this.currentUser); 
     let alert = Alert.create({ 
     title:'Resgiter', 
     subTitle:'Thank you'+this.username+' for register, Press to Continue.', 
     buttons:['OK'] 
     }); 
     this.nav.present(alert); 
    } 
    registerFailAlert(err:string){ 
     let alert = Alert.create({ 
     title:'Register Fail', 
     subTitle:err, 
     buttons:['OK'] 
     }); 
     this.nav.present(alert); 
    } 
} 
+0

Ich denke, wir müssen nur Parse-Objekt-ID zum lokalen Speicher setzen und Abfrage verwenden, um die Informationen aus der Datenbank zu ziehen. Anstatt Parse.User.current() in lokalen Speicher zu versetzen. –

Verwandte Themen