我正在构建React应用,第一个屏幕是一个登录表单,该表单正在其他主机(8080)上调用GET rest api资源(安装了chrome上的CORS扩展程序以克服CORS问题)。
成功登录后,尝试执行另一次GET提取,但这一次是401!
试图设置凭据:“ same-origin”或凭据:“ include”(在两次呼叫,登录和第二次呼叫中),但没有帮助!
fetch('http://<some host>:8080/WebServices/api/SessionManager/login?userName='
+ this.state.userName + '&password=' + this.state.password,
{
//credentials: "include",
//mode: "no-cors"
})
.then(
(response) => {
if (response.status < 200 || response.status > 300) {
console.log('Looks like there was a problem. Status Code: ' +
response.status);
this.state.showError = true;
this.state.errorMessage = 'Please enter a valid credentials.';
return;
} else {
localStorage.setItem('session', response);
console.log("Response ======>", response);
window.location.href = '/main';
}
}
)
.catch((error) => {
console.error(error);
});
第二次通话:
function getSession(){
return localStorage.getItem('session').then(response => JSON.parse(response))
}
function getProjectDetails(){
let params = getSession();
let headers = new Headers();
fetch('http://<host>:8080/WebServices/api/ProjectManager/getProjectDetails?userSessionId=', params
// {
// //credentials: "include",
// //credentials: "same-origin",
// //crossdomain: true,
// //mode: 'no-cors',
// //headers: headers
// }
)
//.then(res => res.json())
.then((data) => {
this.setState({ projectsDetails: data })
console.log(data);
})
.catch(console.log);
} App类扩展了组件{
是否有一种方法可以从浏览器cookie中获取会话并将其设置为提取的标头或参数?我该怎么解决?
答案 0 :(得分:0)
如果我理解正确,那么您正在询问如何存储和检索Cookie中的存储值。
首先,您需要存储从第一次获取时获取的数据,请注意必须将JSON响应转换为JSON.stringify。
localStorage.setItem('session', JSON.stringify(response));
然后您可以使用:
localStorage.getItem('session');
LocalStorage必须存储为json,并在getItem()之后对其进行解码。
因此,为了将会话参数添加到第二次提取中,您可以执行以下操作:
function getSession(){
return JSON.parse(localStorage.getItem('session'))
}
// second fetch,
function secondFetch(){
var params = getSession();
// in var params you have the data stored so now you can do the second fetch
}
希望我能对您有所帮助,任何疑问都可以。