如何解决Apple登录,授权方法仅在第一次返回名称
实施Apple在Web应用程序中的登录(老式ASP.NET,但没有关系-问题可以视为简单的HTML / JS POC),在Apple端点上调用方法授权:
https://appleid.apple.com/auth/authorize?client_id=...&redirect_uri=...&response_type=code%20id_token&state=...&response_mode=form_post&scope=name%20email
我想获得用户的名字和姓氏。 方法返回如下内容: {
"state": "xxx","code": "yyy","id_token": "zzz","user": {
"name": {
"firstName":"John","lastName":"Doe"
},"email":"example@privaterelay.appleid.com"
}
}
id_token是JWT,由用户的Apple ID和电子邮件组成,没有有关姓名的信息。
如您所见,我可以从 user 属性获得名称和姓氏。这是我唯一知道的方法。
问题是,Apple仅在我第一次请求时才返回此数据。这不是错误,而是一个功能:https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/configuring_your_webpage_for_sign_in_with_apple:
重要
Apple仅在用户首次授权时返回用户对象 该应用程序。在您的应用程序中保留此信息;随后的 授权请求将不包含用户对象。
所以我将这些数据存储在以后的工作流中,然后将其存储在数据库中。
现在我的问题/问题:
当用户删除其帐户时,我将从db中删除其所有数据(由于合同,法律等原因,我必须这样做)。
当用户再次通过Apple登录进行注册时,我对Apple端点执行ping操作,并且不再获得用户数据(包括姓名和姓氏)(由于上述Apple政策)!
我应该怎么做?
解决方法
我正在做Apple登录后端部分,遇到类似的问题。
对于IOS 13 +
- SDK为第一个授权请求提供苹果用户uuid,电子邮件和姓名。
- 我们正在使用数据库中的配置文件详细信息映射此唯一的apple_user_uuid。 (在请求失败的情况下,您可以要求后端将其放入队列,应用程序应将其保留在缓存中,直到后端调用成功为止。)
对于低于13的ANDROID / WEB流/ IOS
-
这是Apple回调中的第一个向我们发送带有一个时间码(有效期为5分钟)的名称。
-
在调用令牌API时使用此代码,它为我们提供了id_token JWT。
-
总的来说,主题是apple_user_uuid。
-
将其保留在同一表中。
因此,现在在后端,您将始终具有用apple_user_uuid标记的email,firstName和lastName,对于Apple id保持不变。
如果用户删除您的帐户,请不要删除此映射。直到苹果提供修复程序为止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。