Не удается получить доступ к публичному свойству в authService одним из его методов - PullRequest
0 голосов
/ 07 апреля 2019

Я создаю угловой сервис аутентификации.У меня есть этот сервис с публичной переменной (мне нужна публичная, потому что я использую ее во многих компонентах), это зарегистрированный пользователь, и я хочу обновить эту переменную после входа / выхода из системы.

@Injectable()
export class AuthService implements OnInit{
  public loggedUser: firebase.User;

  constructor(private firebaseAuth: AngularFireAuth) {
    this.loggedUser = firebase.auth().currentUser;
  } ....

У меня есть все функциив сервисе:

signup(email: string, password: string) {
    this.firebaseAuth
      .auth
      .createUserWithEmailAndPassword(email, password)
      .then(value => {
        console.log('Success!', value);
        this.loggedUser = firebase.auth().currentUser;
      })
      .catch(err => {
        console.warn('Something went wrong:',err.message);
      });    
  }

  login(email: string, password: string) {
    this.firebaseAuth
      .auth
      .signInWithEmailAndPassword(email, password)
      .then(value => {
        console.log('Nice, it worked!');
        this.loggedUser = firebase.auth().currentUser;
      })
      .catch(err => {
        console.warn('Something went wrong:',err.message);
      });
  }

и они работают без сбоев.Но с помощью facebook auth:

facebooklogin(){
    var provider = new firebase.auth.FacebookAuthProvider();
    this.firebaseAuth
    .auth
    .signInWithPopup(provider).then(function(result) {
      // This gives you a Facebook Access Token. You can use it to access the Facebook API.
      var token = (<any> result).credential.accessToken;
      // The signed-in user info.
      var userResult = result.user;
      this.loggedUser = firebase.auth().currentUser;
      console.log(userResult,token)
    }).catch(function(error) {
      // Handle Errors here.
      var errorCode = error.code;
      var errorMessage = error.message;
      // The email of the user's account used.
      var email = error.email;
      // The firebase.auth.AuthCredential type that was used.
      var credential = error.credential;
      // ...
      console.warn(errorCode,errorMessage,email,credential)
    });
  }

я получаю сообщение об ошибке при назначении currentUser для loggedUser: «Невозможно установить свойство« loggedUser »из неопределенного».Так что, если это не признается.Если я утешаю это, я получаю неопределенное значение.Как это?

1 Ответ

1 голос
/ 07 апреля 2019

Вы должны использовать для этого функцию со стрелкой, аналогичную предыдущим 2 функциям

facebooklogin(){
    var provider = new firebase.auth.FacebookAuthProvider();
    this.firebaseAuth
    .auth
    .signInWithPopup(provider).then(result => {

    }).catch(error =>{

    });
  }

или если вы хотите пойти тем же путем, сначала определите переменную self, внешнюю по отношению к обратному вызову, а затем отошлите себяв режиме обратного вызова

facebooklogin(){
    var self = this
    var provider = new firebase.auth.FacebookAuthProvider();
    this.firebaseAuth
    .auth
    .signInWithPopup(provider).then(function(result) {
           //self.loggedin
    }).catch(function(error) {

    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...