如何查看 GoogleSignIn 用户上传的图片或谷歌设置的默认图片

Posted

技术标签:

【中文标题】如何查看 GoogleSignIn 用户上传的图片或谷歌设置的默认图片【英文标题】:How to check GoogleSignIn User has uploaded image or default image set by Google 【发布时间】:2019-04-24 18:51:38 【问题描述】:

当用户没有上传他的图片时,Google 用户会低于类型默认图片。

GIDGoogleUser 具有 GIDProfileData 对象,该对象具有“hasImage”布尔变量。它总是返回 true。

我们有什么方法可以知道用户上传了他的个人资料图片,或者它是谷歌通过“GoogleSignIn”组件默认设置的。

【问题讨论】:

【参考方案1】:

当您使用 google 登录时,假设您请求了配置文件范围之一(我认为)您可以针对 userinfo 端点提出请求

GET /oauth2/v2/userinfo HTTP/1.1
Host: www.googleapis.com
Content-length: 0
Authorization: Bearer ya29.GltcBnVqN8CQ5VpTe0qVSwYomBDGkAGtUSzvYBGti_mFKfemFjIPOE00HCOkfqMXpKVS6qUeMKgnzj2uPrxgvmBeeX4b0pDur3ttfGANCWceotLBMqFO4I47b9

这将返回 google 拥有的关于用户的公开个人资料信息。

HTTP/1.1 200 OK
Content-length: 313
X-xss-protection: 1; mode=block
Content-location: https://www.googleapis.com/oauth2/v2/userinfo
X-content-type-options: nosniff
Transfer-encoding: chunked
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Vary: Origin, X-Origin, Referer
Server: ESF
-content-encoding: gzip
Pragma: no-cache
Cache-control: no-cache, no-store, max-age=0, must-revalidate
Date: Thu, 22 Nov 2018 07:06:47 GMT
X-frame-options: SAMEORIGIN
Alt-svc: quic=":443"; ma=2592000; v="44,43,39,35"
Content-type: application/json; charset=UTF-8

  "picture": "https://lh5.googleusercontent.com/-a1CWlFnA5xE/AAAAAAAAAAI/AAAAAAAAl1I/UcwPajZOuN4/photo.jpg", 
  "name": "Linda Lawton", 
  "family_name": "Lawton", 
  "locale": "en", 
  "gender": "female", 
  "link": "https://plus.google.com/+LindaLawton", 
  "given_name": "Linda", 
  "id": "117200475532672775346"

如您所见,它正在返回我的照片。这是我已经上传到我的 Google+ 帐户的照片。由于 google 停止使用 Google+,我怀疑这些都已导出到用户的 Google 帐户,并且必须有一种方法可以从他们上传图片。

现在,如果我向尚未上传图片的帐户发出请求,我会得到 ​​p>

HTTP/1.1 200 OK
Content-length: 326
X-xss-protection: 1; mode=block
Content-location: https://www.googleapis.com/oauth2/v2/userinfo
X-content-type-options: nosniff
Transfer-encoding: chunked
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Vary: Origin, X-Origin, Referer
Server: ESF
-content-encoding: gzip
Pragma: no-cache
Cache-control: no-cache, no-store, max-age=0, must-revalidate
Date: Thu, 22 Nov 2018 07:11:24 GMT
X-frame-options: SAMEORIGIN
Alt-svc: quic=":443"; ma=2592000; v="44,43,39,35"
Content-type: application/json; charset=UTF-8

  "picture": "https://lh5.googleusercontent.com/-GTTySn-WtmA/AAAAAAAAAAI/AAAAAAAAAAA/AGDgw-imFDZsZC-MaGnPIHPnh2Z95O-cSA/mo/photo.jpg", 
  "name": "Linda Lawton", 
  "family_name": "Lawton", 
  "locale": "da", 
  "link": "https://plus.google.com/108097091072786400385", 
  "given_name": "Linda", 
  "id": "108097091072786400385"

这是

因此,即使用户没有亲自上传图片,Google 也会根据他们的名字或姓氏的第一个字母为他们创建一个虚拟图片。除非您创建某种图像识别系统来检测虚拟图像,否则您无法知道它是虚拟图像还是实际图像。

注意:所有这些都是使用oauthplayground 测试的,数据在 IO 响应中也是相同的。

【讨论】:

【参考方案2】:

如果他没有从您的申请中选择图像。并且有一张正在上传的图片,那么很有可能是谷歌提供的图片。只需确保在尝试上传时免除占位符图像。

至于检查谷歌返回的图像是用户上传的图像还是谷歌默认的图像,我检查了两种类型的图像的不同路径,没有发现可以分隔两种类型图像的标识符。

【讨论】:

【参考方案3】:

由于 google 提供带有名称首字母的默认个人资料图片,因此很难确定个人资料图片是否由用户在 google 帐户上设置。但是,如果您想要这个,那么您可以使用 OCR 来识别从谷歌检索到的图像中是否只有一个字母,并且与用户姓名的第一个字母相同。有关 OCR,请参阅此链接。

SwiftOCR

谢谢

【讨论】:

以上是关于如何查看 GoogleSignIn 用户上传的图片或谷歌设置的默认图片的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GoogleSignIn signInSilently 中捕获错误?

如何在前端截取包含用户上传图像的 div?

上传到Nginx的图片文件如何拥有可读的权限

如何更改图片上传目录并在 laravel 中查看图片 url

MongoDB/Express/Node 文件上传错误

上传的数据在云端的怎么查看,保存在啥位置?