#ios #swift #keychain #apple-sign-in
Вопрос:
Итак, вот в чем проблема:
Если у меня есть записи пароля электронной почты и идентификатора Apple id в связке ключей для приложения и я хочу запросить эти данные для автоматического входа в систему, я могу получить информацию об учетных записях на основе пароля электронной почты.
Хотя Apple ID работает не так, как ожидалось. Я получаю ASAuthorizationAppleIDCredential
объект с. authorizationCode == nil
Я действительно получаю credential.identityToken
и могу расшифровать токен. Это действительно так, но дело в том, что мне это нужно authorizationCode
.
Если я использую автономную login
функцию AppleAuthenticator
, она работает правильно. ASAuthorizationController
работает performRequests
идеально, и я могу получить authorizationCode
от ASAuthorizationAppleIDCredential
. Проблема в AggregatedAuthenticator
том, что . Похоже, что ASAuthorizationController
он вроде как сломан и не может получить все данные, если к нему передано более одного запроса.
AggregatedAuthenticator(anchor: view.window!).startAutoLogin() // does not work with apple id
но
AppleAuthenticator(anchor: view.window!).login() // works
Единственная разница в том, что AppleAuthenticator
используется только один запрос ASAuthorizationController
.
Единственный обходной путь, который я мог бы придумать, — это если я зайду туда AggregatedAuthenticator
и снова войду в систему, см. Комментарий в коде:
public func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
switch authorization.credential {
case let appleIDCredential as ASAuthorizationAppleIDCredential:
// Question: here we receive the credential without authorizationCode, but why?
appleAuthenticator.login(with: appleIDCredential)
// BUT if I do:
// appleAuthenticator.login()
// it works fine, but it shows that bottom sheet again asking for your face/touch-id again, but only for apple id this time
case let emailPasswordPair as ASPasswordCredential:
emailAuthenticator.login(with: emailPasswordPair)
default:
print("Irrelevant stuff")
}
}
Есть идеи, ребята?
Взгляните на пример кода ниже:
https://github.com/SergeyPetrachkov/ASAuthControllerIssueSample
Ответ №1:
Хорошо, ребята, это регрессия iOS 15. Раньше все работало.