Почему firebase 'linkWithPopup() не устанавливает пользователя' photoUrl` в firebase?


Я работаю над реализацией преобразования анонимных пользователей в постоянных пользователей с помощью GitHub auth provider.

Идея заключается в том, что в моем приложении пользователи всегда автоматически аутентифицируются как анонимные пользователи. Затем, когда они нажимают кнопку "Войти с помощью GitHub", в основном происходит то, что мое приложение сначала пытается связать этого анонимного пользователя с учетными данными GitHub (что в основном является подписью одновременно), но если связь не удается, потому что пользователь уже существует (например, был связанный ранее), он возвращается к нормальному знаку при использовании GitHub.

Я использую API firebase linkWithPopup(provider) и signInWithPopup(provider). Оба метода возвращают обещание, которое разрешается с аутентифицированным пользователем GitHub, что замечательно! Однако оказывается, что пользовательский объект, который я получаю из linkWithPopup(), не имеет набора свойств photoUrl. Это всегда null.

Когда я signInWithPopup() сразу же, даже не пытаясь связать, я также получаю обещание, разрешенное с объектом user, и этот имеет photoUrl набор. Так что похоже, что в linkWithPopUp() есть ошибка.

Является ли это известной проблемой или это ожидаемое поведение?

Мой код выглядит так:

linkOrSignInWithGitHub(): Observable<User> {
    let linkPromise = firebase.auth()
                              .currentUser
                              .linkWithPopup(new firebase.auth.GithubAuthProvider())
                              .then(result => result.user);

    // If a user has been permanentely linked/authenticated already and tries
    // to link again, firebase will throw an error. That's when we know that
    // user credentials do already exist and we can simply sign in using GitHub.
    return Observable.fromPromise(<Promise<any>>linkPromise).catch(error => this.signInWithGitHub());
  }

И signInWithGitHub() выглядит так:

signInWithGitHub(): Observable<User> {
  let loginPromise = firebase.auth()
                              .signInWithPopup(new firebase.auth.GithubAuthProvider())
                              .then(result => result.user);

  return Observable.fromPromise(<Promise<any>>loginPromise);
}

Итак, опять же, код сам по себе работает отлично, просто я не получаю пользователей photoURL при использовании linkWithPopup().

1 4

1 ответ:

LinkWithPopup не изменяет существующие атрибуты верхнего уровня (currentUser.электронной почты текущего пользователя.отображаемое имя, текущий пользователь.photoURL и др.). Он только добавит новый объект providerData в currentUser.providerData с соответствующим providerData, с которым вы связаны. Данные верхнего уровня настроены на регистрацию, как вы уже заметили.

Вы можете обновить данные верхнего уровня, используя данные этого поставщика вручную после разрешения linkWithPopup. currentUser.updateProfile({ photoURL: currentUser.providerData[indexOfGitHub].photoURL }