Set-Cookie标头未随Azure函数传递

时间:2020-07-29 13:23:04

标签: node.js reactjs cookies azure-functions cookie-httponly

我试图编写一个Azure函数,该函数将在用户的浏览器中设置HttpOnly cookie,但是它不起作用。在Postman中,我可以在响应中看到Set-Cookie标头,但是在浏览器中测试该功能时,会省略此标头。

以下是返回到浏览器的标题: headers: {content-length: "13", content-type: "text/html; charset=utf-8"}

这是我的代码:

天蓝色功能代码

module.exports = function (context, req) {
  context.log('JavaScript HTTP trigger function processed a request.');

  context.res = {
    status: 200,
    headers: {
      "Content-Type": "text/html",
      "Set-Cookie": "a=b; httpOnly",
    },
    
    body:
      'Body Response'
  };
  context.done();
}

节点代码

const createCookieAzure = () => {
  return new Promise((resolve, reject) => {

    console.log("Inside create cookie promise");

    axios({
      url: 'http://localhost:7071/api/SetHttpOnlyCookie',
      method: 'GET',
    })
      .then((res) => {
        console.log(res);
      })
      .catch((err) => {
        console.log(err);
      });
  })
}

const createHttpOnlyCookie = async (e) => {
  e.preventDefault();
  console.log("Button clicked");
  await createCookieAzure();
  console.log("After createcookie");
}

在上面的代码中,createHttpOnlyCookie()由按钮组件的onClick触发。

1 个答案:

答案 0 :(得分:0)

对于这个问题,我认为您需要首先检查浏览器中是否创建了cookie。您可以转到浏览器的“设置”->搜索“ cookie”->“ Cookie和站点数据”->“查看所有cookie和站点数据”->然后搜索您的cookie。

我猜想当您通过axios请求该功能时,它不会将cookie添加到您的浏览器中,因为在api中设置cookie并在axios中请求它与浏览器的请求不同(如果该cookie已添加到浏览器中,一切正常,请忽略其余部分)。如果您在浏览器中找不到cookie,我认为您需要在axios请求中添加另一个标头,如下代码:

axios({
  method: 'get',
  url: '....',
  headers: {'header1': value}
})