Google Firebase Cloud Functions:Android应用程序调用`siteverify`的后端调用实际上需要使用计费帐户[重复]
Posted
技术标签:
【中文标题】Google Firebase Cloud Functions:Android应用程序调用`siteverify`的后端调用实际上需要使用计费帐户[重复]【英文标题】:Google Firebase Cloud Functions: Android app's call to backend which calls `siteverify` actually requires a billing account to be used [duplicate] 【发布时间】:2020-03-17 16:22:38 【问题描述】:我使用 Google Firebase Cloud Functions 来托管以下脚本,以检查 ReCaptcha 键入的我的 android 应用程序的用户是否正确。这个想法是,在用户输入验证码后,应用程序会调用 Cloud Functions 的脚本(托管在 Google 服务器中)。然后后者通过 POST 请求调用以下 URL:https://www.google.com/recaptcha/api/siteverify。
问题:在 Google 服务器的日志中,我发现了以下错误:
未配置结算帐号。外部网络无法访问,配额受到严格限制。配置结算帐号以移除这些限制
Error: Error: getaddrinfo EAI_AGAIN www.google.com:443
at Request._callback (/srv/index.js:20:10)
at self.callback (/srv/node_modules/request/request.js:185:22)
at emitOne (events.js:116:13)
at Request.emit (events.js:211:7)
at Request.onRequestError (/srv/node_modules/request/request.js:881:8)
at emitOne (events.js:116:13)
at ClientRequest.emit (events.js:211:7)
at TLSSocket.socketErrorListener (_http_client.js:401:9)
at emitOne (events.js:116:13)
at TLSSocket.emit (events.js:211:7)
托管在 Google Cloud Functions 的服务器中的后端脚本如下:
const functions = require('firebase-functions');
const request2 = require('request');
/**
* Verifies a Recaptcha filled by the user in his Android app.
* 1. Success: returns the JSON response
* 2. Failure: throws the error
**/
exports.verifyRecaptcha = functions.https.onRequest((request, response) =>
const user_response_token = request.query.user_response_token;
if(user_response_token === '')
throw new functions.https.HttpsError('invalid-argument', 'The function must be called with an adequat user response token.');
const remote_url = 'https://www.google.com/recaptcha/api/siteverify';
const secret = '';
request2.post(url: remote_url, form:secret: secret, response: user_response_token, function(error, response, body)
if(error)
throw new functions.https.HttpsError('unknown', error);
if(!response.statusCode !== 200)
throw new functions.https.HttpsError('unknown', 'Something went wrong. Status code: ' + response.statusCode + '.');
if(!body.success)
throw new functions.https.HttpsError('unknown', 'Unable to verify this captcha.');
return response;
);
);
我的问题是:有什么方法可以在不创建结算帐户的情况下请求此 URL?
【问题讨论】:
您调用的网址属于 Google 服务,因此它应该适用于免费计划。很可能该 URL 模式只是从允许的 URL 列表中丢失。请file a bug report. @FrankvanPuffelen 完成!谢谢你。 :) @FrankvanPuffelen 来自 Firebase 开发人员:这个问题已经为人所知,他们正在努力解决。但他们不能告诉我什么时候能解决。 【参考方案1】:编辑:正如 Frank 在 cmets 中指出的那样,我错过了这是一个内部 URL,并且始终显示免费计划的消息,即使请求应该有效。如果请求不起作用,则应提交错误。
我的答案是针对非 Google(例如外部)网址,我将在下面保留该网址(因为它允许您在解决错误时绕过检查)。
没有。您需要一个计费帐户才能从 Cloud Functions 发出外部网络请求。请参阅Cloud Functions Section of the pricing page。
不过,只需配置一个计费帐户,您仍然可以利用 Spark 计划的免费层级限制。仅发出外部网络请求不会产生实际成本。
【讨论】:
我有 Spark 计划。这样报错正常吗? > 仅限 Google 服务 + 调用:125K/月" 是的,这是您在使用 spark 计划提出请求时遇到的错误。配置计费帐户基本上会让您使用 Blaze 计划(但您仍然可以获得 spark 计划的免费层限制)。据我了解,您可以从云功能free 获得 5GB 的出站网络 - 与火焰计划相同。 @robsiemb 对于免费计划中的项目始终会显示警告,即使它们仅调用 Google 拥有的服务也是如此。 Blast,你说得对,我错过了那个 URL,谢谢。我会编辑答案。以上是关于Google Firebase Cloud Functions:Android应用程序调用`siteverify`的后端调用实际上需要使用计费帐户[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Google Cloud Storage 上传是不是会触发 Firebase Cloud 功能?
使用 Cloud Functions for Firebase 和 @google-cloud/storage 删除图像时出现问题
两个 Firebase 只链接到一个 Google Cloud Platform?