firebase.auth.Auth.signInWithCredential устарела.Пожалуйста, используйте вместо этого firebase.auth.Auth.signInAndRetrieveDataWithCredential - PullRequest
0 голосов
/ 05 марта 2019

Когда используется this.afAuth.auth.signInWithCredential, все отлично работает в моем приложении Ionic.Я могу войти, используя аутентификацию Google, и профиль пользователя выдвигается в базу данных.Тем не менее я получаю сообщение об ошибке в консоли, что signInWithCredential устарела и использовать signInAndRetrieveDataWithCredential.Проблема в том, что signInAndRetrieveDataWithCredential не предоставляет никаких пользовательских данных (uid, электронная почта пользователя, отображаемое имя) ... все это равно нулю.

Так что я могу сделать?В консольной ошибке говорится, что не следует использовать signInWithCredential, даже если он работает.signInAndRetrieveDataWithCredential возвращает значение NULL для пользователя.

  async googleLogin(): Promise<void> {
    try {

      const gplusUser = await this.gplus.login({
        'webClientId': environment.googleWebClientId,
        'offline': true,
        'scopes': 'profile email'
      });
      return await this.afAuth.auth.signInWithCredential(
        firebase.auth.GoogleAuthProvider.credential(gplusUser.idToken)
      ).then((credential) => {
        console.log('creds', credential);
        this.updateUserData(credential);
      });
    } catch (err) {
      console.log(err);
    }
  }
  
      private updateUserData(user) {
    const userRef: firebase.firestore.DocumentReference = firebase.firestore().doc(`users/${user.uid}`);

    const data: User = {
      uid: user.uid,
      email: user.email,
      displayName: user.displayName,
    };
    console.log('user data', data);
    return userRef.set(data);
  }

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Я просто хочу уточнить, что signInAndRetrieveDataWithCredential, а не signInWithCredential, устарело в версии 6 Firebase JS SDK.

Более того, функция signInWithCredentialбыл обновлен и теперь возвращает UserCredential, так что вы должны иметь возможность доступа к uid , email и т. д. под пользователем объект на UserCredential

0 голосов
/ 05 марта 2019

Если я правильно понимаю ваш вопрос, я думаю, что ваша проблема связана с тем, что два метода возвращают разные объекты:

Как объяснено здесь , signInWithCredential() возвращает User объект,

, в то время как

Как объяснено здесь , signInAndRetrieveDataWithCredential() возвращает объект UserCredential, который содержитUser объект.

Таким образом, вы должны изменить свой код следующим образом

  ....
  return await this.afAuth.auth.signInAndRetrieveDataWithCredential(
    firebase.auth.GoogleAuthProvider.credential(gplusUser.idToken)
  ).then((credential) => {
    console.log('creds', credential.user);
    this.updateUserData(credential.user);
  });
...