我已将 Google SignIn SDK (v4.0.1) 集成到我的 iOS 应用程序中。
正常的身份验证过程通过以下方式正常工作:
GIDSignIn.sharedInstance().signIn()
检索到的 idToken 有效,包含电子邮件和用户的基本信息:
给定的名称
姓
图片
- Google 提供此 URL 用于查看令牌数据:https://www.googleapis.com/oauth2/v3/tokeninfo?id_token= https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=
问题是,重新启动应用程序后,我执行静默登录didFinishLaunchingWithOptions
像这样:
if GIDSignIn.sharedInstance().hasAuthInKeychain() {
GIDSignIn.sharedInstance().signInSilently()
}
委托函数sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!)
正在被呼叫。并且身份验证似乎已成功完成。但是,检索到的 idToken(从 user.authentication.idToken)缺少“配置文件”范围的信息。仅提供电子邮件字段。
将此 idToken 发送到我们的后端服务器会导致有效登录,但缺少填充到我们数据库中的信息。令人沮丧。
感觉像GIDSignIn.sharedInstance().signInSilently()
不尊重GIDSignIn.sharedInstance().shouldFetchBasicProfile
即使预先设置为真。
在此阶段尝试通过运行刷新令牌user.authentication.refreshTokens:handler
再次生成一个缺少配置文件范围的新令牌。