Провайдер аутентификации по электронной почте / паролю возвращает пустой userRecord

У меня есть облачная функция, которая запускается при создании пользователя Auth. Я ищу данные пользователя (адрес электронной почты, имя и т. д.), Чтобы заполнить свою БД. Он внезапно перестал работать для типа провайдера аутентификации «электронная почта / пароль». Admin.auth (). GetUser (uid) теперь возвращает userRecord, который содержит неопределенные / нулевые значения для большинства полей. Это, казалось бы, перестало работать на производстве из ниоткуда после нескольких недель работы, есть ли какое-либо объяснение?

exports.createUser = functions.auth.user().onCreate((user) => {
    return createEmailUser(user);
});

function createEmailUser(user) {
    const uid = user.uid;
    return admin.auth().getUser(uid)
    .then(function(userRecord) {
        console.info(userRecord);
        const email = userRecord.email;
        const fullName = userRecord.displayName;
        admin.database().ref('users/' + uid).set({
            email: email,
            name: fullName
        });
    })
    .catch(function(error) {
        console.info("Error fetching user data:", error);
    });
}

Раньше объект userRecord содержал допустимые значения электронной почты и displayName. Теперь я вижу такой объект:

UserRecord {
    uid: 'Lrtj8zafsnYjZl4ckMgwNkgEiVH2',
    email: undefined,
    emailVerified: false,
    displayName: undefined,
    photoURL: undefined,
    phoneNumber: undefined,
    disabled: false,
    metadata: 
        UserMetadata {
            creationTime: 'Wed, 09 Jan 2019 21:40:31 GMT',
            lastSignInTime: null },
    providerData: [],
    passwordHash: undefined,
    passwordSalt: undefined,
    customClaims: undefined,
    tokensValidAfterTime: 'Wed, 09 Jan 2019 21:40:31 GMT' }
Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
1
0
81
1

Ответы 1

Поскольку пользователи регистрируются с использованием метода электронной почты / пароля, в userRecord доступен только адрес электронной почты. Другие поставщики услуг входа могут иметь другие данные при создании пользователя.

Здесь вы можете проверить данные пользователя при создании профиля и обновить профиль с помощью updateUser, если что-то отсутствует:

function createEmailUser(user) {
    const uid = user.uid;

    admin.auth().updateUser(uid, {
      phoneNumber: "+11234567890",
      displayName: "Foo Bar"
    })

    .then(function(userRecord) {
          console.info(userRecord);
    })
    .catch(function(error) {
        console.info("Error fetching user data:", error);
    });
}

Другие вопросы по теме