我试图编写一个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触发。
答案 0 :(得分:0)
对于这个问题,我认为您需要首先检查浏览器中是否创建了cookie。您可以转到浏览器的“设置”->搜索“ cookie”->“ Cookie和站点数据”->“查看所有cookie和站点数据”->然后搜索您的cookie。
我猜想当您通过axios请求该功能时,它不会将cookie添加到您的浏览器中,因为在api中设置cookie并在axios中请求它与浏览器的请求不同(如果该cookie已添加到浏览器中,一切正常,请忽略其余部分)。如果您在浏览器中找不到cookie,我认为您需要在axios
请求中添加另一个标头,如下代码:
axios({
method: 'get',
url: '....',
headers: {'header1': value}
})