Angular - при выходе пользователя он не может войти в систему, пока не обновит страницу - PullRequest
0 голосов
/ 18 октября 2018

Когда пользователь входит в мое приложение, его пользовательские данные затем сохраняются в 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');
  }

Теперь я могуне могу понять, почему это не работает:

  1. При первом входе в систему я работаю (всплывающее окно показывает и перенаправляет переменную sessionStorage)
  2. Затем я выхожу, перенаправляет нормально (переменная sessionStorage теперь не определена, что хорошо)
  3. Затем я ввожу те же учетные данные и нажимаю на кнопку входа, но ничего не происходит (без всплывающих окон / ошибок в консоли)

У меня естьЯ пытался поставить точки останова почти везде, и я действительно не могу понять.

Может быть, мне нужно отписаться от метода входа в систему в какой-то момент?Или Наблюдаемый?

РЕДАКТИРОВАТЬ:

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;
      });
    }));

1 Ответ

0 голосов
/ 24 октября 2018

После прочтения комментария @ user184994 я просто создал функцию для загрузки моих пользователей из БД и вызвал ее в конструкторе AND в моей функции tryConnect.Теперь все работает.

...