重新加载应用程序时,当前用户不会保留(Ionic2 + Parse Server)

时间:2016-07-15 18:27:40

标签: authentication ionic2 parse-server

我目前正在使用Parse Server后端处理Ionic 2应用程序。

我实施了注册过程。这里没有问题,一切都按预期工作:创建新帐户,用户在注册后登录并且当前用户存在。

现在,我想在下次用户打开应用程序时使用当前用户并绕过注册/登录页面(如果用户已经登录)。 Parse文档明确指出:

  

“如果用户每次都必须登录,那将会很麻烦   打开你的应用。您可以通过使用缓存来避免这种情况   当前Parse.User对象。每当您使用任何注册或登录时   方法,用户缓存在localStorage中。“

然而,在我的情况下,我无法使其成功。我在应用程序的初始化过程中根据Parse文档创建了当前用户:

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

每次成功注册后打开应用程序,当前用户都为NULL。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我有点理解发生了什么,但仍然不明白为什么。

在注册或登录期间,Parse应该将当前用户保存到本地存储,但如果由于某种原因本地存储不可用,则将其保存到内存映射。这就是我的情况:Parse总是将当前用户保存到内存映射,这是因为临时存储。因此,每次重新加载应用程序时,Parse内存映射都是空的。我不明白为什么在我的环境中Parse决定本地存储不可用。我无法在代码中找到做出此决定的内容。在我看来,内存映射是默认的(可能不是这样)。是否在Parse的开源版本中尚未实现本地存储功能?或者它与Ionic2实现有什么关系?

Parse团队中是否有人熟悉Parse代码的这一部分?

感谢。

答案 1 :(得分:0)

您好我使用本地存储。

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);
  }
}