Как я могу правильно имитировать облачную функцию локально, чтобы в ней были все данные, как при ее запуске на серверах Firebase? (например, context.auth
)
Я обслуживаю свой проект с firebase serve
, он работает нормально на http://localhost:5000/
, однако мои облачные функции вызываются из https://us-central1-<my-app>.cloudfunctions.net/getUser
. (Функция даже не развернута.)
Чтобы избежать проблемы XY, я пытаюсь отладить свою функцию, но вызов ее из firebase shell приводит к тому, что context.auth
не определено, то же самое при вызове через почтальон из http://localhost:5000/<my-app>/us-central1/getUser
.
Это мой ./functions/src/index.ts
файл
import * as functions from 'firebase-functions'
import admin from 'firebase-admin'
import { inspect } from 'util'
admin.initializeApp()
export const getUser = functions.https.onCall((data, context) => {
console.debug('== getUser called =========================================')
console.log('getUser', inspect(data), inspect(context.auth))
return admin.database().ref('userRights/admin').child(context.auth.uid).once('value', snapshot => {
console.log(snapshot.val())
if (snapshot.val() === true) {
return 'OK'
// return {status: 'OK'}
} else {
return 'NOK'
// return {status: 'error', code: 401, message: 'Unauthorized'}
}
})
})
файл ./firebase.functions.ts
import { functions } from '~/firebase'
export const getUser = functions.httpsCallable('getUser')
Потребитель ./src/pages/AdminPanel/index.tsx
import { getUser } from '~/firebase.functions'
//...
getUser({myDataX: 'asd'}).then(response => console.debug('response', response))