用户数据在angular中注销后仍保留,原因是什么
一切正常,但当我想切换一个用户并注销时,下一个用户不会更新其数据,而是继承上一个用户的图像和数据。。。 我使用会话存储和本地存储,但即使用户从存储中删除,它仍然显示lol 这是我的特殊代码: page1.ts用户数据在angular中注销后仍保留,原因是什么,angular,typescript,session,Angular,Typescript,Session,一切正常,但当我想切换一个用户并注销时,下一个用户不会更新其数据,而是继承上一个用户的图像和数据。。。 我使用会话存储和本地存储,但即使用户从存储中删除,它仍然显示lol 这是我的特殊代码: page1.ts //vars personSubject = new ReplaySubject<any>(1); person$: Observable<any> = this.personSubject.asObservable(); getFullPosts:
//vars
personSubject = new ReplaySubject<any>(1);
person$: Observable<any> = this.personSubject.asObservable();
getFullPosts: Observable<any>;
public userGallery: any;
getFullPosts() {
this.authService.getAllPosts().subscribe((res: any) => {
this.getFullPosts = res.data.post;
this.personSubject.next(res.data.post)
this.userGallery = res.data.post.forEach(img => {
img.galleryImages = img.images.map(image => {
return new ImageItem({ src: image, thumb: image });
});
})
});
//vars
constructor(){
this.keepToken = window.sessionStorage.getItem('token');
if (this.completeUser != null) {
console.log("User data is : ", this.getUser);
console.log("User token is : ", this.keepToken);
} else {
console.log("Can't get token..")
}
}
public get getToken(): any {
const TOKEN = window.sessionStorage.getItem('token');
return TOKEN;
}
public get getUser(): UserRegistered {
const USER = JSON.parse(window.sessionStorage.getItem('user'));
return USER;
}
async logout() {
// remove user from local storage and set current user to null
window.sessionStorage.setItem('button', 'true');
this.clicked = window.sessionStorage.getItem('button');
const loading = this.loadingCtrl.create({
keyboardClose: true,
message: "Logging out. Please wait ...",
duration: 2500
});
(await loading).present();
setTimeout(async () => {
const user = window.sessionStorage.removeItem('user');
const remember = window.sessionStorage.removeItem('remember');
const getuser = window.sessionStorage.getItem('user');
console.log(user, remember, getuser);
window.sessionStorage.setItem('button', 'false');
this.clicked = window.sessionStorage.getItem('button');
const redirect = this.router.navigate(['/auth']);
(await loading).dismiss();
await redirect;
window.sessionStorage.clear();
}, 3500)
}
page2.ts
//vars
personSubject = new ReplaySubject<any>(1);
person$: Observable<any> = this.personSubject.asObservable();
getFullPosts: Observable<any>;
public userGallery: any;
getFullPosts() {
this.authService.getAllPosts().subscribe((res: any) => {
this.getFullPosts = res.data.post;
this.personSubject.next(res.data.post)
this.userGallery = res.data.post.forEach(img => {
img.galleryImages = img.images.map(image => {
return new ImageItem({ src: image, thumb: image });
});
})
});
//vars
constructor(){
this.keepToken = window.sessionStorage.getItem('token');
if (this.completeUser != null) {
console.log("User data is : ", this.getUser);
console.log("User token is : ", this.keepToken);
} else {
console.log("Can't get token..")
}
}
public get getToken(): any {
const TOKEN = window.sessionStorage.getItem('token');
return TOKEN;
}
public get getUser(): UserRegistered {
const USER = JSON.parse(window.sessionStorage.getItem('user'));
return USER;
}
async logout() {
// remove user from local storage and set current user to null
window.sessionStorage.setItem('button', 'true');
this.clicked = window.sessionStorage.getItem('button');
const loading = this.loadingCtrl.create({
keyboardClose: true,
message: "Logging out. Please wait ...",
duration: 2500
});
(await loading).present();
setTimeout(async () => {
const user = window.sessionStorage.removeItem('user');
const remember = window.sessionStorage.removeItem('remember');
const getuser = window.sessionStorage.getItem('user');
console.log(user, remember, getuser);
window.sessionStorage.setItem('button', 'false');
this.clicked = window.sessionStorage.getItem('button');
const redirect = this.router.navigate(['/auth']);
(await loading).dismiss();
await redirect;
window.sessionStorage.clear();
}, 3500)
}
注销后,我使用另一个帐户重新登录,但数据不会随新用户更新,但在控制台中,我获得了正确的新用户数据,只是前端没有显示。有什么想法吗?这可以通过删除“firebase:session:”的
localStorage
条目来解决
window.localStorage.removietem(“firebase:session:”;
在设置超时时,console.log打印什么?用户数据还是未定义?否则,为什么要对“person”使用ReplaySubject(它代表您的用户,对吗?),因为ReplaySubject可以大致“重放”旧值,就像您以前的用户运行window.sessionStorage.clear()一样代码>在重定向工作之前?更好的是,你能在导航结束后再做吗?:this.router.navigate(['/auth'])。然后(()=>{window.sessionStorage.clear();})代码>@KevinALBRECHT console.log(用户,记住,getuser);注销后,所有值都为空。不知道这会在replaysubject上重复调用,我该怎么做?@Inst1nct尝试使用一个简单的“主题”,看看是否有任何变化更多关于主题类型的信息:哟,兄弟,它就像一个符咒。。Idk这是什么把戏,但只要它起作用。。游戏打得好