无法在firebase中看到请求标头的值?

时间:2017-12-17 01:37:54

标签: node.js typescript firebase http-headers google-cloud-functions

我执行以下操作:

var headers = new Headers();
headers.append("bunny", "test");
headers.append("rabbit", "jump");
fetch("blahurl.com/someservice", {headers:headers})

在firebase结束时:

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

不确定如何获取标头值,我只是有标题......

4 个答案:

答案 0 :(得分:2)

您应该查看Parsing HTTP requests

您可以通过此方法获取请求标头:

req.get('bunny');
req.get('rabbit');

答案 1 :(得分:1)

我在搜索&#34时发现了这个答案; firebase请求标头未定义"。

<强>问题

我已经编写了一个firebase函数(使用Node JS)。该帖子包括标题为&#34; user_token&#34;的标题。在我的代码中,我检索了这样的标头值:

const userToken = request.header("user_token");

我使用Firebase CLI服务器(firebase serve)在本地计算机上测试了此代码,并且运行正常。

但是,一旦我将此代码(firebase deploy)部署到我的Firebase帐户,我就遇到了问题。将完全相同的标题键/值发布到我的Firbase网址时,由于userToken值为undefined,我收到了错误。

<强>解决方案

最终,将我的代码更改为以下内容解决了我的问题:

const userToken = request.get("x-user-token");
@Pen的回答帮助我指出了正确的方向。最初,我只是将代码更改为:

const userToken = request.get("user_token");

不幸的是,我仍然以未定义的userToken值结束。查看Parsing HTTP requests documentation,我注意到他们的示例标题值键以&#34; x - &#34;开头。从&#34; user_token&#34;更新我的标题值键to&#34; x-user-token&#34;做了伎俩。

答案 2 :(得分:1)

如果仍然有同样的问题,这是解决打字稿的方法:

首先解决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"
  },

答案 3 :(得分:0)

看起来这个问题与cors有关,所以将函数体转移到它中就像这样:

const cors = require('cors')({ origin: true });

export const listener = functions.https.onRequest(async (req, res) => {
    cors(req, res, () => {

然后cookie开始正确显示......

我不完全确定为什么,这不是一个响应,它只是一个请求。