0

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

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

这是我的代码:

Azure 函数代码

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 触发的。

4

1 回答 1

0

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

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

axios({
  method: 'get',
  url: '....',
  headers: {'header1': value}
})
于 2020-07-30T06:58:28.900 回答