Firebase Functions.EventContext становится неопределенным после обновления

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

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

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


console.info(`Snapshot = ${snapshot.toJSON}`)
console.info(`Context = ${context.auth.uid}`)
admin.auth().getUser(context.auth.uid)
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
0
455
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

This field is only populated for Realtime Database triggers and Callable functions. For an unauthenticated user, this field is null. For Firebase admin users and event types that do not provide user information, this field will not exist.

Определение 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.info(`Snapshot = ${snapshot.toJSON}`)
    if (context.auth) {
        console.info(`Context = ${context.auth.uid}`)
        admin.auth().getUser(context.auth.uid)
    }
})

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

Ссылка не работает

Mick 16.03.2022 04:26

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