Когда время создания или lastSignInTime firebase.auth.UserMetadata возвращается как null / undefined?

#firebase #firebase-authentication #react-native-firebase

#firebase #firebase-аутентификация #реагировать-родной-firebase

Вопрос:

Я столкнулся с этой проблемой при попытке создать user документ в Firestore после регистрации нового пользователя с использованием аутентификации Firebase.

В user документе я хочу включить creationTime lastSignInTime поля и, но обнаружил, что эти поля являются необязательными. Это означает, что мне также придется сделать эти поля в моем user документе необязательными, но я не совсем уверен, почему они должны быть необязательными в первую очередь. Я просто не могу представить случай, когда эти поля в metadata экземпляре пользователя должны быть установлены так, как undefined если бы они возвращались после успешной регистрации / входа с использованием Firebase Auth.

Если нет конкретного случая, когда они возвращаются как undefined , я планирую сделать эти поля в моем user документе обязательными полями и выдать ошибку на всякий случай, если они будут возвращены как undefined .

Например, с помощью react-native-firebase :

 try {
  const { user } = await auth().signInAnonymously();
  const {
    metadata: { creationTime, lastSignInTime },
    uid,
  } = user;

  if (creationTime == null) {
    throw new TypeError('creationTime is returned as undefined');
  }
  if (lastSignInTime == null) {
    throw new TypeError('lastSignInTime is returned as undefined');
  }
  await firestore().collection('user').doc(uid).set({ 
    creationTime,
    lastSignInTime,
    // other fields
  });
} catch (error) {
  // handle error
}

 

Но если нет, то нет другого выбора, кроме как использовать их как необязательные.

Итак, подводя итог вопросу, есть ли какой-либо случай, когда creationTime для or lastSignInTime установлено значение undefined / null ? Безопасно ли просто рассматривать их как обязательные поля?

(Аналогичная проблема опубликована здесь, но она закрыта без ответа.)

Ответ №1:

Я не уверен насчет CreationTime, но lastSignInTime может быть undefined / null, если регистрация произошла, но пользователь еще не вошел в систему. Например, пользователю может потребоваться выполнить проверку электронной почты или что-то в этом роде.