ลงชื่อเข้าใช้ 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 คือ JWT ซึ่งประกอบด้วย apple ID และอีเมลของผู้ใช้ไม่มีข้อมูลเกี่ยวกับชื่อหรือนามสกุล
อย่างที่คุณเห็นฉันสามารถรับชื่อและนามสกุลจากคุณสมบัติของผู้ใช้ นั่นเป็นวิธีเดียวที่ฉันรู้จัก
ปัญหาคือ Apple ส่งคืนข้อมูลนี้ในครั้งแรกที่ฉันร้องขอเท่านั้น ไม่ใช่ข้อบกพร่อง แต่เป็นคุณสมบัติ:https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/configuring_your_webpage_for_sign_in_with_apple :
สำคัญ
Apple ส่งคืนวัตถุของผู้ใช้ในครั้งแรกที่ผู้ใช้อนุญาตแอปเท่านั้น เก็บข้อมูลนี้ไว้จากแอปของคุณ คำขอการอนุญาตที่ตามมาจะไม่มีวัตถุผู้ใช้
ดังนั้นฉันจึงเก็บข้อมูลนี้ไว้ในเวิร์กโฟลว์ในภายหลังฉันจะเก็บไว้ในฐานข้อมูล
ตอนนี้ปัญหา / คำถามของฉัน:
เมื่อผู้ใช้ลบบัญชีฉันจะลบข้อมูลทั้งหมดออกจากฐานข้อมูล (ฉันต้องทำเพราะสัญญากฎหมาย ฯลฯ )
เมื่อผู้ใช้ลงทะเบียนอีกครั้งผ่านการลงชื่อเข้าใช้ Apple ฉัน ping ตำแหน่งปลายทางของ Apple และฉันไม่ได้รับข้อมูลผู้ใช้ (รวมถึงชื่อและนามสกุล) อีกต่อไป (เนื่องจากนโยบายของ Apple ที่อ้างไว้ข้างต้น)!
ฉันควรทำอย่างไรเพื่อให้ได้มา
คำตอบ
ฉันกำลังทำส่วนแบ็คเอนด์การลงชื่อเข้าใช้แอปเปิ้ลประสบปัญหาที่คล้ายกัน
สำหรับ IOS 13+
- SDK ให้ uuid ผู้ใช้ apple อีเมลและชื่อสำหรับคำขออนุญาตครั้งแรก
- เรากำลังทำแผนที่ apple_user_uuid ที่ไม่ซ้ำกันนี้กับรายละเอียดโปรไฟล์ใน DB (ในกรณีที่คำขอล้มเหลวคุณสามารถขอให้แบ็คเอนด์วางสิ่งนี้ในคิวและแอพควรเก็บสิ่งนี้ไว้ในแคชจนกว่าการโทรแบ็คเอนด์จะสำเร็จ)
สำหรับ ANDROID / WEB Flow / IOS ต่ำกว่า 13
เป็นครั้งแรกในการโทรกลับของ apple มันจะส่งชื่อเราพร้อมรหัสครั้งเดียว (หมดอายุ 5 นาที)
การใช้รหัสนี้เมื่อเราเรียกโทเค็น API จะให้ id_token JWT แก่เรา
ในโทเค็นหัวเรื่องคือ apple_user_uuid
คงอยู่ในตารางเดียวกัน
ดังนั้นในส่วนแบ็คเอนด์คุณจะมีอีเมล firstName, lastName ติดแท็กด้วย apple_user_uuid ซึ่งจะคงที่สำหรับ apple id
และอย่าลบการแมปนี้หากผู้ใช้ลบบัญชีของคุณ จนกว่า Apple จะให้การแก้ไข