Firebase 托管重写为云功能提示登录

Hon*_*Guy 0 firebase firebase-hosting google-cloud-functions

我在从Firebase Hosting提供一些动态内容时遇到了一些麻烦。

我编写了一个http.onRequest()云函数,它返回一个图像(内容类型:图像/jpeg)作为其响应。如果我直接在其 url 上访问该函数,该函数将按预期工作:

https://us-central1-my-project-id.cloudfunctions.net/hosting-getPartnerImg

根据文档,我正在使用该us-central1地区。

我也希望能够使用 Firebase Hosting 调用此函数,我已对其进行了如下配置:

firebase.json(片段)

"rewrites" : [
{
    "source" : "/pimg",
    "function" : "hosting-getPartnerImage"
}
],
"headers": [ 
{
    "source": "/pimg",
    "headers": [ {
            "key": "Cache-Control",
            "value": "max-age=60"
        },
        {
            "key": "Access-Control-Allow-Origin",
            "value": "*"
        } 
    ]

}]
Run Code Online (Sandbox Code Playgroud)

index.js(片段)

"rewrites" : [
{
    "source" : "/pimg",
    "function" : "hosting-getPartnerImage"
}
],
"headers": [ 
{
    "source": "/pimg",
    "headers": [ {
            "key": "Cache-Control",
            "value": "max-age=60"
        },
        {
            "key": "Access-Control-Allow-Origin",
            "value": "*"
        } 
    ]

}]
Run Code Online (Sandbox Code Playgroud)

托管.js

const functions = require('firebase-functions');
const admin = require('firebase-admin');

let firebaseDefaultConfig = JSON.parse(process.env.FIREBASE_CONFIG);

admin.initializeApp(firebaseDefaultConfig);

const fn = process.env.FUNCTION_NAME;

if(!fn || fn === 'hosting-getPartnerImg'){
    exports.hosting = require('./hosting.js');
}
Run Code Online (Sandbox Code Playgroud)

这个难倒我了。导航到一个 URL,如:

https://my-project-id.web.app/pimg?partner=BLAH&file=foo.jpg不会像其他 URL那样生成Page Not Found,所以我有理由相信重写正在按预期进行。尽管如此,为什么我会立即被带到:

appengine.google.com/_ah/loginform... 消息:

** 一个应用程序正在请求您的 Google 帐户的权限 **

onRequest不能通过 Firebase 托管匿名使用HTTP云函数吗?为什么当我直接点击它时该函数可以工作,但当我通过 Firebase 托管重写访问它时请求许可。

任何想法,将不胜感激。

rob*_*emb 5

AppEngine 登录页面行为是当被调用的函数不存在时发生的情况(无论是否通过重写)。

你的问题是这个重写:

"function" : "hosting-getPartnerImage"
Run Code Online (Sandbox Code Playgroud)

与实际的函数名称对比:

if(!fn || fn === 'hosting-getPartnerImg'){
Run Code Online (Sandbox Code Playgroud)

或者

exports.getPartnerImg = ...
Run Code Online (Sandbox Code Playgroud)

值得注意的是,重写没有调用正确的函数。

您应该将重写更改为调用hosting-getPartnerImg。