Когда пользователь входит в мое приложение, его пользовательские данные затем сохраняются в sessionStorage для удобства доступа по всему приложению (возможно, это не лучший подход, но это уже другой вопрос).
Код компонента:
onSubmit() {
this.auth.tryConnect(this.tryConnectUser.email, this.tryConnectUser.password).subscribe(success => {
if (success) {
this.tryConnectUser = new User('', '', '', '');
swal('Good job!', 'You are now logged in', 'success').then((result) => {
if (result) {
this.service.loadRecipes();
this.router.navigate(['home']);
}
});
} else {
swal('Oops', 'Please check your credentials', 'error');
}
});
}
Сервисный код:
tryConnect(email: string, password: string): Observable<Boolean> {
return new Observable(observer => {
// u = array de users
this.
usersWithId.
subscribe(u => {
for (const a of u) {
if (a.email === email && a.password === password) {
sessionStorage.setItem('connectedUser', JSON.stringify(a));
observer.next(true);
observer.complete();
break;
}
}
observer.next(false);
observer.complete();
}, error1 => console.log(error1));
});
}
Когда они выходят из системы, я просто удаляю «connectedUser» из sessionStorage и перенаправляю на страницу входа
logout() {
sessionStorage.removeItem('connectedUser');
}
Теперь я могуне могу понять, почему это не работает:
- При первом входе в систему я работаю (всплывающее окно показывает и перенаправляет переменную sessionStorage)
- Затем я выхожу, перенаправляет нормально (переменная sessionStorage теперь не определена, что хорошо)
- Затем я ввожу те же учетные данные и нажимаю на кнопку входа, но ничего не происходит (без всплывающих окон / ошибок в консоли)
У меня естьЯ пытался поставить точки останова почти везде, и я действительно не могу понять.
Может быть, мне нужно отписаться от метода входа в систему в какой-то момент?Или Наблюдаемый?
РЕДАКТИРОВАТЬ:
usersWithId в основном Observable<User[]>
, который возвращается из моей базы данных Firestore.
this.usersWithId = this.db.collection<User>('/users').snapshotChanges().pipe(map(changes => {
return changes.map(a => {
const data = a.payload.doc.data() as User;
data.userID = a.payload.doc.id;
return data;
});
}));