Firebase主机重写到云功能提示登录



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

我编写了一个http.onRequest()云函数,它返回一个图像(内容类型:image/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": "*"
} 
]
}]

index.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');
}

hosting.js

const functions = require('firebase-functions');
const admin = require('firebase-admin');
exports.getPartnerImg = functions.region("us-central1").https.onRequest((req, res) => {
const partnerId = req.query.partner;
const fileName = req.query.file;
res.set("content-type", "image/jpeg");
const bucket = admin.storage().bucket();
let file = bucket.file("partnerImgs/" + partnerId + "/" + fileName);
let readStream = file.createReadStream();
readStream.pipe(res);
});

这件事把我难住了。导航到类似的URL

https://my-project-id.web.app/pimg?partner=BLAH&file=foo.jpg不会像其他URL那样生成PageNotFound,所以我有理由相信重写会如期进行。如果是这样的话,为什么我会立即被带到:

带有消息的appengine.google.com/_ah/loginform...

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

HTTPonRequest云功能不能通过Firebase Hosting匿名使用吗?为什么当我直接点击它时,该功能可以工作,而当我通过Firebase Hosting重写访问它时,它却请求权限。

任何想法都将不胜感激。

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

你的问题是这个重写:

"function" : "hosting-getPartnerImage"

与实际功能名称相比:

if(!fn || fn === 'hosting-getPartnerImg'){

exports.getPartnerImg = ...

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

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

最新更新