Firebase Cloud Functions:来自 referer <empty> 的请求被阻止。 - PERMISSION_DENIED
Firebase Cloud Functions: Requests from referer <empty> are blocked. - PERMISSION_DENIED
我不确定为什么以下代码抛出 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,
}
});
}
我使用 request-promise 进行请求的方式有问题吗?
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"
}]
}]
}
}
因为您是从 node.js
环境中调用您的函数,所以未设置 HTTP Header Referer
。当您通过浏览器创建请求时,浏览器会自动为您填写此字段。
您可以使用以下方式获得合适的推荐值:
"https://" + process.env.GCLOUD_PROJECT + ".cloudfunctions.net/createJobDynamicLink"
// becomes "https://your-project-id.cloudfunctions.net/createJobDynamicLink"
此生成的 URL 不可调用,因为它不是以区域开头,但这意味着您现在有一个 URL 可用于识别呼叫即将到来来自云函数。
要使用它,请将其添加到您的 request-promise
选项 object。
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。
转到 Google API 凭据 https://console.developers.google.com/apis/credentials 并查看您正在使用的 API 密钥是否有任何限制。
如果它受到 HTTP referrers 的限制,则将您的网站域添加到其中并添加 Referrer header 就像上面的答案一样。
尽管在您的用例中,None 或 IP 地址 限制是更好的选择。
就我而言,我有
<meta name="referrer" content="no-referrer">
在头部,因此未发送引用者
我不确定为什么以下代码抛出 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,
}
});
}
我使用 request-promise 进行请求的方式有问题吗?
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"
}]
}]
}
}
因为您是从 node.js
环境中调用您的函数,所以未设置 HTTP Header Referer
。当您通过浏览器创建请求时,浏览器会自动为您填写此字段。
您可以使用以下方式获得合适的推荐值:
"https://" + process.env.GCLOUD_PROJECT + ".cloudfunctions.net/createJobDynamicLink"
// becomes "https://your-project-id.cloudfunctions.net/createJobDynamicLink"
此生成的 URL 不可调用,因为它不是以区域开头,但这意味着您现在有一个 URL 可用于识别呼叫即将到来来自云函数。
要使用它,请将其添加到您的 request-promise
选项 object。
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。
转到 Google API 凭据 https://console.developers.google.com/apis/credentials 并查看您正在使用的 API 密钥是否有任何限制。 如果它受到 HTTP referrers 的限制,则将您的网站域添加到其中并添加 Referrer header 就像上面的答案一样。 尽管在您的用例中,None 或 IP 地址 限制是更好的选择。
就我而言,我有
<meta name="referrer" content="no-referrer">
在头部,因此未发送引用者