在 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 中看不到它们

在 Android Studio 2.2 的开发者服务中看不到云选项

在 firebug 中看不到 socket.io 请求日志