Firebase服务:从本地服务的应用中,调用本地服务的功能

时间:2018-07-02 15:54:21

标签: firebase google-cloud-functions

  

如何在本地正确模拟云功能,以使其具有在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))

3 个答案:

答案 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)

只是找到了解决方法。 使用提琴手AutoResponder将函数调用重定向到本地服务函数。

第1步

从客户端复制功能的目标网址

step 1

第2步

复制本地服务的函数网址

enter image description here

第3步

激活自动回购程序并使用以下规则 (第二条规则对于允许所有未解决的请求也很重要

enter image description here