Answers:
提取默认情况下不使用cookie。要启用Cookie,请执行以下操作:
fetch(url, {
credentials: "same-origin"
}).then(...).catch(...);
same-origin
(这确实仍然工作)意味着更多的头将得到尊重(饼干等),但你的代码将不得不响应有限。
document.cookie
,但仍可用于ajax或提取请求。
除了@Khanetor的答案外,对于使用跨域请求的用户: credentials: 'include'
样本JSON提取请求:
fetch(url, {
method: 'GET',
credentials: 'include'
})
.then((response) => response.json())
.then((json) => {
console.log('Gotcha');
}).catch((err) => {
console.log(err);
});
https://developer.mozilla.org/zh-CN/docs/Web/API/Request/credentials
document.cookie
就足以将其包含在请求中。
刚刚解决。只有两个f。暴力之日
对我而言,秘密在于:
我打电话给POST / api / auth,看到成功接收了cookie。
然后使用来调用GET / api / users / credentials: 'include'
并获得401 unauth,因为没有随请求一起发送cookie。
KEY也将设置credentials: 'include'
为第一个/api/auth
呼叫。
credentials: 'include'
首先指定POST /api/auth
只是在这里为.net
webapi2
用户添加正确的答案。
如果您正在使用,cors
因为您的客户端站点是从与您的客户端地址不同的地址提供的,webapi
那么您还需要SupportsCredentials=true
在服务器端配置中包括它。
// Access-Control-Allow-Origin
// https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api
var cors = new EnableCorsAttribute(Settings.CORSSites,"*", "*");
cors.SupportsCredentials = true;
config.EnableCors(cors);
这对我有用:
import Cookies from 'universal-cookie';
const cookies = new Cookies();
function headers(set_cookie=false) {
let headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
};
if (set_cookie) {
headers['Authorization'] = "Bearer " + cookies.get('remember_user_token');
}
return headers;
}
然后建立通话:
export function fetchTests(user_id) {
return function (dispatch) {
let data = {
method: 'POST',
credentials: 'same-origin',
mode: 'same-origin',
body: JSON.stringify({
user_id: user_id
}),
headers: headers(true)
};
return fetch('/api/v1/tests/listing/', data)
.then(response => response.json())
.then(json => dispatch(receiveTests(json)));
};
}