Firebase/Google 登录身份验证:在 Gmail 企业帐户上未检索到个人资料照片

Eli*_*nen 5 javascript google-authentication firebase firebase-authentication google-signin

我正在使用 Firebase / Google 登录身份验证来登录我的应用程序中的用户。身份验证与 Gmail 帐户完美配合 - 但是,对于我的客户的帐户(拥有企业 Gmail 帐户 (..@company.com)),身份验证有效,但用户个人资料图片未共享(用户对象返回为默认图片,如下所示: https://lh3.googleusercontent.com/-9Me77eEe8m0/AAAAAAAAAAI/AAAAAAAAAAA/0uO0KAv-PMQ/photo.jpg )。

有关信息,我使用非常标准的signInWithPopup方法:

var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider)      
  .then((credential) =>  {
    var authState = credential.user
    updateUserData()  // Updating user's data })
  .catch(error => console.log(error))
Run Code Online (Sandbox Code Playgroud)

因此,我尝试通过使用基于 id 的 url 直接在网上查找个人资料照片(而不是从身份验证中获取个人资料照片)来解决此问题,例如:

http://picasaweb.google.com/data/entry/api/user/?alt=json

但 json 还返回企业帐户的电子邮件地址的默认照片,因此这让我假设该企业帐户必须有一些特定的隐私设置,以防止照片被共享。

有没有人已经遇到过这个问题,或者有任何想法:

  • 要更改 Gmail 企业帐户的设置以启用个人资料照片共享?
  • 如果可以制作同意屏幕,以获得用户的同意与应用程序共享其基本个人资料信息(我知道当应用程序仅需要基本个人资料信息 - 姓名、电子邮件时,谷歌最近删除了同意屏幕, 照片, ..-) ?
  • 一种更“hacky”的方式从网上获取照片?
  • 还有其他建议吗?

Jea*_*sso 8

我已经被同一问题困扰好几天了。这就是我如何获得正确的照片网址!

var user = firebase.auth().currentUser;

if (user != null) {
  user.providerData.forEach(profile => {
    console.log(profile.photoURL);
  }); //this will give you all the urls once there is user data
}
Run Code Online (Sandbox Code Playgroud)

很可能您正在加载虚拟网址,而 firebase 仍在获取所有用户信息。您只需要在尝试获取网址之前添加检查以确保存在用户数据。我也在使用我的企业帐户。