如何查看 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 中捕获错误?