Angular 6的web应用在应用启动时出现不良网络时注销用户



有时当我的应用程序在网络连接不好的情况下启动时,用户会退出。

我不希望这种事发生。我希望用户继续登录,即使应用程序没有正常启动,因为糟糕的互联网连接。

"@angular/fire": "^5.1.0",

我附加了我的AuthService代码,也我的依赖。我做错了什么?

import { Router } from '@angular/router';
import { Injectable } from '@angular/core';
import { AngularFireAuth } from '@angular/fire/auth';
import { Observable } from 'rxjs/Observable';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class AuthService {
private user: Observable<firebase.User>;
public userDetails: firebase.User = null;
userAuthDoneSubject = new Subject();
constructor(
private firebaseAuth: AngularFireAuth) {
this.user = firebaseAuth.authState;
this.user.subscribe(
(userDetails) => {
if (userDetails) {
this.userDetails = userDetails;
}
else {
this.userDetails = null;
}
this.userAuthDoneSubject.next();
},(error) => {this.userAuthDoneSubject.error("AuthService:error authenticate"); }
);
}
isLoggedIn() {
if (this.userDetails == null ) {
return false;
} else {
return true;
}
}

logout() {
return this.firebaseAuth.auth.signOut();
}
signinUser(customToken:any){
return this.firebaseAuth.auth.signInWithCustomToken(customToken)
}
getJWT() {
return this.firebaseAuth.auth.currentUser.getIdToken(true);
}
}
"dependencies": {
"@agm/core": "^1.0.0",
"@angular/animations": "^6.1.0",
"@angular/common": "^6.1.0",
"@angular/compiler": "^6.1.0",
"@angular/core": "^6.1.0",
"@angular/fire": "^5.1.0",
"@angular/forms": "^6.1.0",
"@angular/http": "^6.1.0",
"@angular/platform-browser": "^6.1.0",
"@angular/platform-browser-dynamic": "^6.1.0",
"@angular/router": "^6.1.0",
"@types/googlemaps": "^3.30.19",
"angular2-multiselect-dropdown": "^4.6.2",
"core-js": "^2.5.4",
"css-toggle-switch": "^4.1.0",
"firebase": "^5.5.9",
"ng-lazyload-image": "^6.1.0",
"ngx-owl-carousel-o": "^0.1.2",
"ngx-page-scroll-core": "^6.0.2",
"rxjs": "^6.0.0",
"rxjs-compat": "^6.3.3",
"zone.js": "~0.8.26"
},

当你在客户端应用程序中使用firebase时,firebase脚本将被加载,然后它将检查之前的会话是否存在,然后将对认证服务器进行验证。如果由于某种原因互联网连接失败,这个过程将不会成功,因此事件onauthstatechange将不会被触发,这将导致你的应用程序状态处于未登录状态。

你的代码是基于一个第三方库(我不知道它的内部),它包装了firebase功能,可能会监听firebase事件。

我建议您在用户登录时将firebase令牌保存在localStorage中,并且在internet连接失败的情况下,您可以尝试使用保存在localStorage中的令牌登录。或者您可以监听网络连接事件。请查看此文档

相关内容

最新更新