Связь социального провайдера с анонимным пользователем на двух устройствах - PullRequest
0 голосов
/ 19 апреля 2020

Когда пользователь начинает использовать наше приложение, мы регистрируем его, используя анонимный вход Firebase. Позже мы позволим им войти в систему с социальными провайдерами, такими как Apple. Мы используем "auth (). CurrentUser? .LinkWithCredential", чтобы связать социальные учетные данные с идентификатором анонимного пользователя.

Мы столкнулись с ситуацией, которую не знаем, как решить:

  1. Пользователь устанавливает приложение на устройстве и использует вход в систему с помощью Apple для входа. Мы связываем анонимную учетную запись с именем входа Apple, и все работает просто отлично.

  2. Но сейчас пользователь покупает новое устройство. Он устанавливает приложение и запускает его. Он получает новый анонимный UID. Затем он пытается войти с Apple. Теперь, если мы пытаемся вызвать linkWithCredential, мы получим ошибку: «auth / credential-уже используется]. Эти учетные данные уже связаны с другой учетной записью пользователя»

Это, конечно, правда, поскольку учетные данные Apple были связаны с анонимным пользователем на старом устройстве. Итак, как мы можем позволить пользователю снова войти в систему с нового устройства? Мы думали перехватить ошибку, а затем вызвать signInWithCredential вместо linkWithCredential. Но тогда мы получаем ошибку: получен дубликат учетных данных. Пожалуйста, попробуйте еще раз с новыми учетными данными.

Кажется, вы не можете использовать учетные данные Apple для более чем одного вызова.

Итак, еще раз - мы застряли, не имея возможности позволить пользователю войти в два устройства.

let appleAuthRequestResponse = null;
try {
  appleAuthRequestResponse = await appleAuth.performRequest({
    requestedOperation: AppleAuthRequestOperation.LOGIN,
    requestedScopes: [
      AppleAuthRequestScope.EMAIL,
      AppleAuthRequestScope.FULL_NAME,
    ],
  });
} catch (err) {
  // TODO: decide what to do
  return;
}

const {
  identityToken,
  nonce
} = appleAuthRequestResponse;
const appleCredential = auth.AppleAuthProvider.credential(
  identityToken,
  nonce
);

let userCredentials = null;

try {
  userCredentials = await auth().currentUser ? .linkWithCredential(
    appleCredential
  );
  // This will work on the first device but fail on the second one
  console.log(userCredentials);
} catch (err) {
  // This will fail as well with error: Duplicate credential received
  await auth().signInWithCredential(appleCredential)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...