Добавление «Войти через Apple» в Expo реагирует на собственное приложение, использующее аутентификацию Firebase - PullRequest
0 голосов
/ 11 октября 2019

У меня есть собственное приложение, которое использует Expo (управляемое, а не отдельное) и использует аутентификацию Firebase для обеспечения входа в систему Facebook и электронной почты / пароля.

Теперь мне нужно реализовать «Войти через Apple» в соответствии с новыми правилами Apple.

Expo предоставляет способ для этого, и он работает, возвращая информацию пользователя. Но поскольку все пользователи управляются с помощью аутентификации Firebase, мне нужно взять то, что Apple отправляет мне, и передать его аутентификации Firebase.

The Firebase docs объясняет, как это сделать, используя signInWithCustomToken. Но для этого нужно, чтобы я создал токен. В Node это было бы просто, но это приложение без сервера, и я не нашел инструмента, который может генерировать токен RS256 на клиенте. Из документации Firebase кажется, что RS256 является требованием. Я попытался использовать expo-jwt с HS256, и Firebase возвращает ошибку о том, что токен неправильно сформирован. Но кроме использования HS256 вместо RS256 я не вижу других возможных проблем. Токен успешно закодирован и декодирован следующим образом.

const appleJwt = JWT.encode(
    {
      familyName: 'M',
      givenName: 'Greg',
      email: 'apple_user@example.com',
      alg: 'HS256',
      iss:
        'https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit',
      sub: serviceAccountEmail,
      aud: serviceAccountEmail,
      iat: Math.floor(Date.now() / 1000),
      exp: Math.floor(Date.now() / 1000) + 3600,
      uid: appleUid
    },
    key,
    {
      algorithm: 'HS256'
    }
  );
  console.log('TCL: loginWithApple -> appleJwt', appleJwt);
  const appleJwtDecoded = JWT.decode(appleJwt, key);
  console.log('TCL: loginWithApple -> appleJwtDecoded', appleJwtDecoded);

Только когда я пытаюсь использовать его с аутентификацией Firebase, он возвращает ошибку, что токен неправильно отформатирован.

return Firebase.auth().signInWithCustomToken(appleJwt).then(...

Обратите внимание, что key и serviceAccountEmail были получены с консоли Firebase.

Мне интересно, возможно, есть какое-то более простое решение, которое я пропускаю. Сообщество ожидает известие от Firebase о том, будут ли они предоставлять Apple вход в систему из коробки, как они это делают для других провайдеров, поэтому, возможно, мне просто нужно набраться терпения. Но я бы предпочел найти решение.

Большое спасибо заранее за любые советы.

Обновление 2019-10-15

Я создал простой сервер узлов с API, который мое приложение могло бы использовать для генерации токена с RS256, но Firebase по-прежнему отвечает, чтотокен плохо отформатирован, когда я передаю его signInWithCustomToken. Не могу понять, что с ним не так.

Итак, поскольку у меня был собран сервер узлов, я просто настроил Firebase Admin SDK и использовал предоставленный *1036* createCustomToken для генерации токена. Firebase принимает его сейчас, когда я передаю его signInWithCustomToken, что было моей проблемой, поэтому эта проблема для меня решена. После первого успешного входа в Firebase я записываю все пользовательские данные в Firestore. Для последующих входов в систему просто обновляется дата последнего входа в Firestore. Надеемся, что Firebase все еще скоро предоставит свое собственное решение, так как наличие отдельного сервера узлов просто для этого не идеально.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2019

Firebase Auth теперь поддерживает вход Apple на всех 3 платформах:

0 голосов
/ 13 октября 2019

Команда Firebase работает над реализацией этого в официальном SDK

https://github.com/firebase/firebase-ios-sdk/issues/3145#issuecomment-510178359

...