Firebase Functions.EventContext становится неопределенным после обновления - PullRequest
0 голосов
/ 30 мая 2019

fuctions.EventContext выдает ошибку при попытке получить uid после обновления до последней версии firebase (6.10.0)

У меня был тестовый проект, работающий нормально. Я обновил инструменты Firebase, набрал текст и создал новый проект с тем же кодом. Внезапно проект выдает ошибку на EventContext.auth.uid. При наведении мыши на контекст или аутентификацию он говорит Объект, возможно, 'undefined'.ts (2532)

export const onAccountTransferCreated = functions.database
.ref('/data_transfer/from_data/user_data/{transferPas}')
.onCreate(async(snapshot, context) => {


console.log(`Snapshot = ${snapshot.toJSON}`)
console.log(`Context = ${context.auth.uid}`)
admin.auth().getUser(context.auth.uid)

1 Ответ

1 голос
/ 30 мая 2019

context - это объект типа EventContext . Как видно из документации API для его свойства auth , оно может быть нулевым или неопределенным:

Это поле заполняется только для триггеров базы данных реального времени и Вызываемые функции. Для неаутентифицированного пользователя это поле пустое. Для пользователей с правами администратора Firebase и типов событий, которые не предоставляют пользователю информация, это поле не будет существовать.

Определение TypeScript для EventContext.auth:

export interface EventContext {
    auth?: {
        uid: string;
        token: object;
    };
}

Обратите внимание? после auth. Это означает, что свойство не должно существовать.

TypeScript (в строгом режиме) предупреждает вас, что у вас может возникнуть проблема во время выполнения, если это свойство отсутствует. Вы должны проверить это, прежде чем использовать его:

export const onAccountTransferCreated = functions.database
.ref('/data_transfer/from_data/user_data/{transferPas}')
.onCreate(async(snapshot, context) => {

    console.log(`Snapshot = ${snapshot.toJSON}`)
    if (context.auth) {
        console.log(`Context = ${context.auth.uid}`)
        admin.auth().getUser(context.auth.uid)
    }
})

Или вы можете включить строгий режим TypeScript, который я не рекомендую. Всегда лучше выполнять проверку, чтобы избежать сбоев во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...