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, который я не рекомендую. Всегда лучше выполнять проверку, чтобы избежать сбоев во время выполнения.