如何在本地正确模拟云功能,以使其具有在Firebase服务器上调用时的所有数据? (例如
context.auth
)
我正在使用firebase serve
服务我的项目,它可以在http://localhost:5000/
上正常运行,但是,我的云函数是从https://us-central1-<my-app>.cloudfunctions.net/getUser
调用的。 (该功能甚至没有部署。)
为避免XY问题,我正在尝试调试函数,但是从 firebase shell 调用它会导致context.auth
的定义不确定,与通过 postman 调用时相同>来自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))
答案 0 :(得分:4)
当前不支持对像这样的可调用函数进行本地测试。团队正在为您指定一种可调用函数的URL端点,以便您可以将其重定向到其他位置进行测试。
答案 1 :(得分:1)
默认情况下,firebase serve
将查询发送到CLOUD函数而不是本地主机,但是可以将其更改为指向本地主机。
@gregbkr在此{{3}}线程中找到了解决方法。
您基本上在html头中的firebase初始化脚本(firebase / init.js)之后添加了此代码。
<script>
firebase.functions().useFunctionsEmulator("http://localhost:5001");
</script>
在部署到SERVER时,请确保将其删除
答案 2 :(得分:0)