【发布时间】: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