(在浏览器中使用离子服务)当用户登录我的应用程序时,创建了与数据库的连接,并且使用其ID插入了一些初步数据。这很好。问题出现了,如果您注销然后再次注册,当它试图再次连接时,它说:
"Connection Failed: Invalid handshake."
如果我注销并刷新应用程序,然后注册,则可以正常运行。我认为auth或数据库提供商中的某些内容是从注销之前从中持有的值,这就是为什么连接在新用户上失败的原因。我查看了Chrome Dev中的本地存储空间,除了登录时,清除了" Ionic_insights_session"以外的所有内容。所以我不知道问题是什么。一些代码片段适合您:
用户注册时:
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");
});
}
这将它们发送到指南页面:
ionViewDidLoad() {
if (this.navParams.data.justSignedUp) {
var points = this.db.collection("points");
points.insert({
id: this.user.id,
points: 9000
});
}
}
最后注销:
logout() {
this.auth.logout();
this.db.disconnect();
this.navCtrl.setRoot(StartPage, null, {'animate': true, 'direction': 'back'});
}
如前所述,如果我注销,然后刷新浏览器,则可以正常工作。任何帮助都很棒欢呼
我也有同样的问题,我们可能会过早地称呼获取或发布数据的功能,我正在努力。我认为我们可以使用承诺功能来管理这一点。
我想我的登录过程需要一些时间,因此我编写一个函数来检测用户何时登录。
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();
});
}
还记住要导入osservable
import {Observable} from 'rxjs/Rx';
在您的代码中,您必须调用此功能,而不是this.db.connect()
看起来IonicDB已不复存在。所以我想这不再是问题!