实施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政策)!
我应该怎么做?
答案 0 :(得分:1)
我正在做Apple登录后端部分,遇到类似的问题。
对于IOS 13 +
对于低于13的ANDROID / WEB流/ IOS
这是Apple回调中的第一个向我们发送带有一个时间码(有效期为5分钟)的名称。
在调用令牌API时使用此代码,它为我们提供了id_token JWT。
总的来说,主题是apple_user_uuid。
将其保留在同一表中。
因此,现在在后端,您将始终具有用apple_user_uuid标记的email,firstName和lastName,对于Apple id保持不变。
如果用户删除您的帐户,请不要删除此映射。直到苹果提供修复程序为止。