在 Firebase 中看不到请求标头的值?
Posted
技术标签:
【中文标题】在 Firebase 中看不到请求标头的值?【英文标题】:Can't see value of request headers in firebase? 【发布时间】:2018-05-30 19:06:41 【问题描述】:我执行以下操作:
var headers = new Headers();
headers.append("bunny", "test");
headers.append("rabbit", "jump");
fetch("blahurl.com/someservice", headers:headers)
在火力基地端:
export const listener = functions.https.onRequest(async (req, res) =>
for (let entry of req.rawHeaders)
console.log(entry); // here I see a 'bunny,rabbit' get printed somewhere
//However this yields undefined:
req.headers.bunny
不确定如何获取标头值,我只有标头...
【问题讨论】:
【参考方案1】:你应该检查Parsing HTTP requests。
您可以通过这种方法简单地获取请求头:
req.get('bunny');
req.get('rabbit');
【讨论】:
您能否捕获您的请求标头并将其包含在您的问题中? (developers.google.com/web/tools/chrome-devtools/…)【参考方案2】:我在搜索“firebase request header is undefined”时找到了这个答案。
问题
我已经编写了一个我要发布到的 firebase 函数(使用 Node JS)。该帖子包含一个标题为“user_token”的标题。在我的代码中,我检索了这样的标头值:
const userToken = request.header("user_token");
我使用 Firebase CLI 服务器 (firebase serve
) 在本地机器上测试了这段代码,它运行良好。
但是,在我将此代码 (firebase deploy
) 部署到我的 Firebase 帐户后,我遇到了问题。将完全相同的标题键/值发布到我的 Firbase URL,我收到错误,因为 userToken
值是 undefined
。
解决方案
最终,将我的代码更改为以下解决了我的问题:
const userToken = request.get("x-user-token");
@Ben 的回答帮助我指明了正确的方向。最初,我只是将代码更改为:
const userToken = request.get("user_token");
不幸的是,我最终还是得到了一个未定义的 userToken 值。查看Parsing HTTP requests documentation,我注意到他们的示例标头值键以“x-”开头。将我的标头值键从“user_token”更新为“x-user-token”就可以了。
【讨论】:
【参考方案3】:看起来问题出在 cors 上,因此将函数的主体移入其中可以正常工作,如下所示:
const cors = require('cors')( origin: true );
export const listener = functions.https.onRequest(async (req, res) =>
cors(req, res, () =>
然后 cookie 开始正确显示...
我不完全确定为什么,这不是响应,它只是一个请求。
【讨论】:
【参考方案4】:如果有人仍然有同样的问题,这是打字稿的解决方案:
首先解决CORS问题:
import * as cors from 'cors';
const corsHandler = cors(origin: true);
export const getmBucksShop = functions.https.onRequest((request, response) =>
corsHandler(request, response, () =>
//Access Header Values here
//Your Code Here
);
);
不起作用:
console.error(request.headers.authorization);
有效:
console.error(request.headers['authorization']);
console.error(request.get("authorization"));
所需的依赖项:
"dependencies":
"cookie-parser": "^1.4.3",
"cors": "^2.8.5",
"express": "^4.16.4",
"firebase-admin": "~6.0.0",
"firebase-functions": "^2.1.0"
,
【讨论】:
以上是关于在 Firebase 中看不到请求标头的值?的主要内容,如果未能解决你的问题,请参考以下文章
在 Angular 8 的 http 响应中看不到任何响应标头
在 nghttp2 示例中看不到 Http-Settings 标头
我在 DebugView Firebase Analytics ios swift 中看不到自定义日志事件
我在 Firebase 中看到应用内购买,但在 iTunes connect/AppAnnie 中看不到它们