【问题标题】:Cloud Functions and Express req.headers.cookie UndefinedCloud Functions 和 Express req.headers.cookie 未定义
【发布时间】:2018-11-29 08:42:54
【问题描述】:

我正在使用 Firebase Cloud Functions 和 cookie 模块,其中一个函数设置“__session”cookie(Cloud Functions 中唯一可用的 cookie),然后对另一个函数执行“GET”请求。在第二个函数中,当我尝试使用 cookie.parse(req.headers.cookie).__session 获取 cookie 时,它​​说它是未定义的。但是,我可以在浏览器中看到 cookie,所以我不知道为什么我无法在我的应用程序中获取它。我注意到还有其他几个与此问题类似的 SO 问题也没有得到解答。

这是第一个函数的相关代码:

const nonce = require('nonce')();

const state = nonce();
res.cookie('__session', state);

request.get('https://myappurl.firebaseapp.com/myapp/path?state=' + state, { json: true })
    .catch((error) => {
      console.log(error.message);
    });

res.redirect('someurl.com');

来自第二个函数:

const cookie = require('cookie');

app.get('/myapp/path', (req, res) => {

  console.log(req.headers.cookie); // This is undefined.
  const stateCookie = cookie.parse(req.headers.cookie).__session
  console.log('stateCookie: ' + stateCookie); // This is undefined.

}

更新

添加代码后,我意识到我将 cookie 设置在 res(快速响应)上,但使用 request(request-promise 模块)发出获取请求。我想这可能是我的问题。我将弄清楚如何将 cookie 设置为request,看看是否能解决问题。

【问题讨论】:

    标签: node.js firebase express cookies google-cloud-functions


    【解决方案1】:

    我主要解决了这个问题。原来在 Express res 上设置 cookie 是问题的一部分。我应该将它设置在request 对象(请求-承诺)上。我尝试了几种方法来在请求中设置 cookie,包括request.cookie。但唯一可行的方法是:

    var options = {
        headers: {
          Cookie: '__session=mytestheadercookie'
        }
    };
    
    request.get('https://myapp.com', options)
        .catch((error) => {
          console.log(error.message);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      相关资源
      最近更新 更多