从React中的获取中获取401-传递sessionId

时间:2019-06-27 07:00:13

标签: reactjs cors fetch session-cookies

我正在构建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中获取会话并将其设置为提取的标头或参数?我该怎么解决?

1 个答案:

答案 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
}

希望我能对您有所帮助,任何疑问都可以。