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 托管重写访问它时请求许可。
任何想法,将不胜感激。
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。
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |