我的代码相同。我正在调用fetch()但网络和服务器中的请求没有像cookie这样的请求标头。我发现了另外一篇帖子Request headers not sent from Service Worker,但它无法解决我的问题。
self.addEventListener('push', function (event) {
event.waitUntil(
self.registration.pushManager.getSubscription().then(function (subscription) {
fetch('/user/get-notification', {
mode: 'no-cors',
method: 'post',
headers: {
'Authorization': 'Bearer ' + self.token,
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(subscription)
}).then(function (response) {
if (response.status != 'success') {
console.log('Looks like there was a problem. Status Code: ' + response.status);
throw new Error();
}
return response.json().then(function (data) {
var title = data.title;
var message = data.message;
var icon = data.image;
return self.registration.showNotification(title, {
body: message,
icon: icon
});
});
}).catch(function (err) {
console.error('Unable to retrieve data', err);
});
})
);
});
答案 0 :(得分:3)
要包含Cookie,您需要在请求中添加credentials
字段:
fetch('/user/get-notification', {
credentials: 'include', // <-- To include cookies!
mode: 'no-cors',
method: 'post',
headers: {
'Authorization': 'Bearer ' + self.token,
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(subscription)
})
答案 1 :(得分:1)
标题是一个界面,您可以通过初始化为其提供新的选项集。像这样:
headers: new Headers({
'Authorization': 'Bearer ' + self.token,
'Accept': 'application/json',
'Content-Type': 'application/json'
})
答案 2 :(得分:-2)
在浏览了服务工作者的官方文档之后,我注意到了
的添加凭据:'include'
在fetch enable中发送请求头。感谢支持。