我正在努力获取包含在对 httpsCallable() 的调用中的用户 ID 令牌。我从颤振中这样称呼它:
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 中存在:
答案 0 :(得分:3)
似乎 Firebase Cloud Functions 的某些功能不可用,除非您使用 Firebase CLI 部署它们。 CLI 不支持 python,只支持 Javascript 和 Typescript。我建议使用这两种语言中的任何一种重写该函数,并通过 Firebase CLI 进行部署。
这里有一个类似的答案: https://stackoverflow.com/a/54583565/3822043