Вход в 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 возвращает эти данные только при первом запросе. Это не ошибка, это особенность:https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/configuring_your_webpage_for_sign_in_with_apple :
Важный
Apple возвращает объект пользователя только при первой авторизации приложения. Сохраните эту информацию из своего приложения; последующие запросы авторизации не будут содержать объект пользователя.
Поэтому я сохраняю эти данные для дальнейшего использования в рабочем процессе, я сохраню их в базе данных.
Теперь моя проблема / вопрос:
Когда пользователь удаляет свою учетную запись, я удаляю все его данные из базы данных (я должен это сделать из-за контракта, закона и т. Д.).
Когда пользователь снова регистрируется через вход в систему Apple, я проверяю связь с конечной точкой Apple, и я больше не получаю данные пользователя (включая имя и фамилию) (из-за политики Apple, указанной выше)!
Что мне делать, чтобы это получить?
Ответы
Я делаю внутреннюю часть входа в систему Apple, столкнулся с аналогичной проблемой.
Для iOS 13+
- SDK предоставляет идентификатор пользователя Apple, адрес электронной почты и имя для первого запроса авторизации.
- Мы сопоставляем этот уникальный идентификатор apple_user_uuid с данными профиля в БД. (В случае сбоев запроса вы можете попросить серверную часть поместить это в очередь, и приложение должно хранить это в кеше до тех пор, пока внутренний вызов не будет успешным).
Для ANDROID / WEB Flow / IOS ниже 13
Впервые в обратном вызове Apple он отправляет нам имя с одноразовым кодом (истечение 5 минут).
Используя этот код, когда мы вызываем токен API, он предоставляет нам id_token JWT.
В токене тема - apple_user_uuid.
Сохраните это в той же таблице.
Итак, теперь у вас всегда будет адрес электронной почты, firstName, lastName с тегами apple_user_uuid, которые остаются постоянными для идентификатора Apple.
И не удаляйте это сопоставление, если пользователь удаляет вашу учетную запись. Пока Apple не исправит ошибку.