【问题标题】:How to make FirebaseFunctions.instance.httpsCallable() pass Authorization header? (Using Flutter)如何使 FirebaseFunctions.instance.httpsCallable() 传递授权标头? (使用颤振)
【发布时间】:2021-07-05 17:38:23
【问题描述】:

我正在努力将用户 ID 令牌包含在对 httpsCallable() 的调用中。我从颤振中这样称呼它:

Future<bool> cfCreateAccount(String name, address, email, phoneNumber, password, randomSalt, {int? parentId}) async {
  HttpsCallable callable = FirebaseFunctions.instance.httpsCallable('createAccount', options: HttpsCallableOptions(timeout: Duration(seconds: 10)));
  try {
    var param = {'name': name, 'address': address, 'email': email, 'phone_number': phoneNumber, 'password': password, 'random_salt': randomSalt};
    final HttpsCallableResult result = await callable.call(param);
    if (result.data['response'] == 'Pass') {
      return true;
    }
  } catch (e) {
    print("Failed Cloud Function Call: $e");
  }
  return false;
}

这个人问了我一个类似的问题,但他们说答案是自动包含授权:

How to add headers to firebase httpscallable

我已经用这个登录了我的 Flutter 应用程序:

await auth.signInWithEmailAndPassword(email: user, password: password);

然后我可以调用 user.getIdToken() ,它会显示我的身份验证 ID。但我尝试检查的每一种方式似乎都表明 auth 标头不在对云函数的请求中。

我用python写了云函数。它看起来像这样:

def createAccount(request):
    request_json = request.get_json(silent=True)
    request_args = request.args
    sql = None
    conn = None
    res = dict()

    res['data'] = str(request.authorization)
    return json.dumps(res)

但这会返回“无”。意味着请求中没有授权。我也试过这个,但它在 python 中给出了一个错误:

token = request.headers['Authorization'].replace('Bearer ','')

我如何在颤动中调用 httpsCallable() 是否存在一些问题?我不确定 FirebaseFunctions.instance.httpsCallable() 如何从 FirebaseAuth.instance 获取身份验证 ID ??

这是 Firebase 控制台上的云功能,只是为了表明它在 python3.8 中的存在:

【问题讨论】:

  • 顺便说一句,这是一本非常有趣的书,虽然它还没有帮助我解决这个问题:linkage.io/…
  • 你是如何在python中部署一个可调用的云函数的?我知道 Firebase 函数只是 Google Cloud 函数的扩展,但我想知道这是否与为什么不自动填充身份验证有关。
  • 嗨@Tristan,可调用对象在flutter中,云函数在python中。请注意,云功能可以有多种语言,一旦您将 firebase 与 gcp 项目连接起来,您的所有云功能都会在两者之间共享。
  • 查看这篇文章可以很好地确认 gcp 云功能和 firebase 云功能是如何相同的:stackoverflow.com/a/57149226/559525

标签: firebase flutter firebase-authentication google-cloud-functions


【解决方案1】:

Firebase Cloud Functions 的某些功能似乎不可用,除非您使用 Firebase CLI 进行部署。 CLI 不支持 python,只支持 Javascript 和 Typescript。我建议用这两种语言重写函数并通过 Firebase CLI 部署它。

这里有一个类似的答案: https://stackoverflow.com/a/54583565/3822043

【讨论】:

  • 有趣。当我实际上能够让可调用函数与 python 一起工作时,我感到很惊讶,它正在学习 json 的哪些部分需要在那里。但就您而言,可能只有传入和传出的数据才能与 python 一起使用。不是像 auth 这样的其他标题。听起来对吗?
  • 为了清楚起见,我现在可以将 args 从颤振传递给 python 函数,并获得响应。我只是没有用于 python 云功能检查授权的 id
  • 我认为您可以手动包含当前登录用户的 UID。我敢肯定那会更不安全。我不确定通过身份验证时所有 Firebase 在后台做了什么。
  • 我没有信息可以支持这一点,但我假设您的颤振应用程序正在传递身份验证信息,但 python 函数没有传递该信息?我想 Node 函数会发生一些后台处理,而不是 python 函数。
  • 好的,谢谢。我现在正在通过自己传递 id 令牌进行测试。它可以工作,如果是 https 应该没问题。谢谢。我会接受你的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 2020-02-03
  • 2019-11-12
相关资源
最近更新 更多