Почему 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 ответ:
LinkWithPopup не изменяет существующие атрибуты верхнего уровня (currentUser.электронной почты текущего пользователя.отображаемое имя, текущий пользователь.photoURL и др.). Он только добавит новый объект providerData в currentUser.providerData с соответствующим providerData, с которым вы связаны. Данные верхнего уровня настроены на регистрацию, как вы уже заметили.
Вы можете обновить данные верхнего уровня, используя данные этого поставщика вручную после разрешения linkWithPopup.
currentUser.updateProfile({ photoURL: currentUser.providerData[indexOfGitHub].photoURL }