Захват текущего пользователя в AngularFireAuth

Как мне захватить вошедшего в систему пользователя?

Я делаю это: console.log('Вход в систему...'); this.afAuth.auth.signInWithEmailAndPassword (этот адрес электронной почты, этот пароль);

Но в документах не ясно, как ввести пользователя в код. Они показывают путь в шаблоне, но мне нужно сохранить текущего пользователя.


person Peter S    schedule 14.10.2017    source источник


Ответы (4)


Чтобы получить текущего пользователя:

let user = AngularFireAuth.auth.currentUser;
// returns user object

По какой-то причине каждое обновление страницы приводит к исчезновению currentUser, и я сохраняю идентификатор пользователя (UID) в локальном хранилище, поэтому я могу запомнить пользователя и позже сослаться на Firestore:

localStorage.setItem('userUID', user.uid);
// ...
let userID = localStorage.getItem('userUID');
AngularFirestore.firestore.collection('users')
      .doc(userID)
      // ...

При выходе из системы вы просто выходите из системы и удаляете значение локального хранилища:

logout() {
   AngularFireAuth.auth.signOut().then(() => {
      localStorage.removeItem('userUID');
   };
}
person Community    schedule 27.12.2017
comment
CurrentUser исчезает, потому что пользователь еще не прибыл. Вы должны использовать обещание JavaScript. - person Franz Noel; 08.07.2019

AngularFireAuth.authState — это Observable, поэтому вы можете подписаться на него, а затем получить пользовательский экземпляр:

  private user: firebase.User;

  constructor(public afAuth: AngularFireAuth) {
    afAuth.authState.subscribe(user => {
      this.user = user;
    });
  }
person igor    schedule 18.12.2018

Я понял!

console.log('Logging in...');
this.afAuth.auth.signInWithEmailAndPassword(this.email, this.password).then((user) => {
  this.user = this.afAuth.authState;
});
person Peter S    schedule 14.10.2017

Решение, которое я нашел в Интернете, и оно работает независимо от обновления страницы:

AngularFireAuth.authState.pipe(first()).toPromise();

https://fireship.io/snippets/check-if-current-user-exists-with-angularfire/

person Aníbal Sánchez Numa    schedule 28.02.2021