Firebase Cloud Functions:来自引用 的请求被阻止。 -PERMISSION_DENIED

问题描述 投票:0回答:1

我不确定为什么以下代码会引发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"
      }]
    }]
  }
}
node.js firebase firebase-dynamic-links request-promise
1个回答
0
投票

因为您正在从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。

© www.soinside.com 2019 - 2024. All rights reserved.