gpt4 book ai didi

firebase - 为什么 firebase 的 linkWithPopup() 没有在 firebase 中设置用户 `photoUrl`?

转载 作者:行者123 更新时间:2023-12-01 01:53:00 25 4
gpt4 key购买 nike

我正在使用 GitHub 身份验证提供程序实现将匿名用户转换为永久用户。

这个想法是在我的应用程序中,用户总是被自动验证为匿名用户。然后,当他们单击“使用 GitHub 登录”按钮时,基本上发生的情况是我的应用程序首先尝试将该匿名用户链接到 GitHub 凭据(这基本上是同时登录),但是如果链接失败,因为用户已经存在(例如之前已被链接),它会回退到使用 GitHub 的正常登录。

我使用 firebase 的 API linkWithPopup(provider)signInWithPopup(provider) .这两种方法都返回一个由经过身份验证的 GitHub 用户解析的 promise ,这很棒!然而,事实证明我从 linkWithPopup() 得到的用户对象没有 photoUrl属性集。总是null .

当我signInWithPopup()直接,甚至没有尝试链接,我也得到了一个用用户对象解决的 promise ,这个确实有 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() .

最佳答案

linkWithPopup 不会修改现有的顶级属性(currentUser.email、currentUser.displayName、currentUser.photoURL 等)。它只会在 currentUser.providerData 中添加一个新的 providerData 对象,其中包含您链接的相应 providerData 。
正如您已经注意到的那样,顶级数据是在注册时设置的。

您可以在 linkWithPopup 解析后使用该提供者的数据手动更新顶级数据。currentUser.updateProfile({
photoURL: currentUser.providerData[indexOfGitHub].photoURL
}

关于firebase - 为什么 firebase 的 linkWithPopup() 没有在 firebase 中设置用户 `photoUrl`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42766440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com