我目前正在使用Parse Server后端处理Ionic 2应用程序。
我实施了注册过程。这里没有问题,一切都按预期工作:创建新帐户,用户在注册后登录并且当前用户存在。
现在,我想在下次用户打开应用程序时使用当前用户并绕过注册/登录页面(如果用户已经登录)。 Parse文档明确指出:
然而,在我的情况下,我无法使其成功。我在应用程序的初始化过程中根据Parse文档创建了当前用户:“如果用户每次都必须登录,那将会很麻烦 打开你的应用。您可以通过使用缓存来避免这种情况 当前Parse.User对象。每当您使用任何注册或登录时 方法,用户缓存在localStorage中。“
var currentUser = Parse.User.current();
if (currentUser) {
// do stuff with the user
} else {
// show the signup or login page
}
每次成功注册后打开应用程序,当前用户都为NULL。
有什么想法吗?
答案 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);
}
}