我正在使用角度射击(用于Firebase身份验证)。我遵循了一些示例代码,并开始构建我的身份验证流程。示例代码之一:
@Injectable({
providedIn: 'root'
})
export class UserService {
loggedInUser:any = {}
userid : string = "";
settings : any = {};
loggedin:boolean = false;
public user: IUser;
public userLoaded:boolean = false;
constructor(
private afAuth: AngularFireAuth,
private db: AngularFirestore,
private auth: AngularFireAuth,
) {
this.afAuth.authState.pipe(
switchMap(user => {
if (user) {
console.log("User Logged In :", {user,uid: user.uid});
this.db.doc<User>(`Users/${user.uid}`).valueChanges().subscribe(user=> {
console.log("From Subscription : ", user);
this.loggedInUser = user;
this.settings = user.settings;
this.loggedin = true;
});
} else {
console.log("Assumed Logout", user);
this.loggedInUser = {};
this.settings = {};
this.loggedin = false;
return of(null)
}
})
).subscribe();
}//End of Constructor
在此示例中,我假设如果用户注销,则将获得null。但是,我找不到在IF语句中触发else条件的方法。
有没有一种方法可以检测到应用程序的注销,我想这样做,以便可以清除持有键的任何变量。
例如,在我的userService中,我希望从firebase保留用户文档的缓存副本,我希望其他服务引用该副本(而不是直接订阅该文档)。我要确保在注销时将其清空,以便随后的登录不会引用旧信息。