我不确定为什么以下代码会引发Google api密钥权限被拒绝。 我在Firebase控制台和Google控制台中都启用了api或服务。
export async function createJobDynamicLink(job){
if(job.jobStatus !== 'approved' || (job.dynamicLink).length > 2){
console.log('Dynamic link already exist!');
return false;
}
console.log(dynamic_links);
console.log(dynamic_links_key);
// Firebase web api key logs just fine
const options = {
method: 'POST',
uri: `https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=${dynamic_links_key}`,
body: {
"longDynamicLink": makeDynamicLongLink(job)
},
json: true
};
return await requestpromise(options)
.then(function (parsedBody) {
console.log(parsedBody);
return parsedBody.shortLink;
})
.then((shortLink) => {
//post.shareUrl = shortLink;
console.log('short link: ' + shortLink);
//return event.data.ref.set(post);
return shortLink;
})
}
export async function makeDynamicLongLink(job) {
return buildUrl(`${dynamic_links}`, {
queryParams: {
link: `https://app.com/jobs/${slugify(job.jobTitle)}-${job.id}`,
apn: "com.app.appe",
ibi: "com.app.app",
dfl: "https://app.com",
st: job.jobTitle,
}
});
}
我使用请求承诺处理请求的方式有问题吗?
StatusCodeError: 403 - {
"error": {
"code": 403,
"message": "Requests from referer <empty> are blocked.",
"status": "PERMISSION_DENIED",
"details": [{
"@type": "type.googleapis.com/google.rpc.Help",
"links": [{
"description":"Google developer console API key",
"url": "https://console.developers.google.com/project/904573jjwj/apiui/credential"
}]
}]
}
}
答案 0 :(得分:1)
由于要从node.js
环境中调用函数,因此未设置HTTP标头Referer
。通过浏览器创建请求时,浏览器将自动为您填充此字段。
您可以使用以下方法获得合适的引荐来源网址值:
"https://" + process.env.GCLOUD_PROJECT + ".cloudfunctions.net/createJobDynamicLink"
// becomes "https://your-project-id.cloudfunctions.net/createJobDynamicLink"
此生成的URL不可调用,因为它不是以区域开头的,但这意味着您现在有了一个URL,可用于识别该呼叫来自Cloud Function。
要使用它,请将其添加到您的request-promise
选项对象中。
const options = {
method: 'POST',
uri: `https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=${dynamic_links_key}`,
body: {
"longDynamicLink": makeDynamicLongLink(job)
},
headers: {
"Referer": "https://" + process.env.GCLOUD_PROJECT + ".cloudfunctions.net/createJobDynamicLink"
},
json: true
};
注意:我将使用request-promise-native
而不是request-promise
-相同的API,但是会跳过加载Bluebird。
答案 1 :(得分:1)
转到Google API凭据https://console.developers.google.com/apis/credentials,查看您所使用的API密钥是否受到任何限制。 如果受 HTTP引荐来源网址限制,则将您的网站域添加到其中,并添加 Referrer 标头,就像上面的答案一样。 尽管在您的用例中,无或 IP地址限制是一个更好的选择。