Apple 로그인, 인증 방법은 처음에만 이름을 반환합니다.
웹 앱에서 Apple 로그인 구현 (구식 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":"[email protected]"
}
}
id_token은 사용자의 Apple ID와 이메일로 구성된 JWT이며 이름이나성에 관한 데이터가 없습니다.
보시다시피 사용자 속성 에서 이름과 성을 가져올 수 있습니다 . 그것이 나에게 알려진 유일한 방법입니다.
문제는 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 정책으로 인해)!
그것을 얻으려면 어떻게해야합니까?
답변
나는 애플 로그인 백엔드 부분을 수행하고 있으며 비슷한 문제에 직면했습니다.
IOS 13 이상
- SDK는 첫 번째 인증 요청에 대한 Apple 사용자 uuid, 이메일 및 이름을 제공합니다.
- 이 고유 한 apple_user_uuid를 DB의 프로필 세부 정보와 매핑합니다. (요청이 실패한 경우 백엔드에 큐에 넣도록 요청할 수 있으며 앱은 백엔드 호출이 성공할 때까지이를 캐시에 보관해야합니다).
13 미만의 ANDROID / WEB Flow / IOS
Apple 콜백에서 처음으로 일회성 코드 (5 분 만료)와 함께 이름을 보냅니다.
토큰 API를 호출 할 때이 코드를 사용하여 id_token JWT를 제공합니다.
토큰에서 주제는 apple_user_uuid입니다.
동일한 테이블에 유지하십시오.
이제 백엔드에서는 항상 apple_user_uuid로 태그가 지정된 email, firstName, lastName을 갖게되며, 이는 애플 ID에 대해 일정하게 유지됩니다.
사용자가 계정을 삭제하는 경우이 매핑을 삭제하지 마십시오. 사과가 해결책을 제공 할 때까지.