fetch send cookies 不成功

来源:13-5 PC端登录功能模块开发

qq_靛岚_0

2017-06-21

在实现登录模块的时候发现,登录成功之后不能拿到相应的session数据。

不过用postman, 后台是可以拿到session数据的。

后台是用nodejs和express。

app.use(require('cors')());
app.use('/', index);

app.use('/graphql', graphqlHTTP (req => ({
    schema,
    rootValue: { session: req.session }
    ,graphiql:true
})));

前端react里的fetch试过credentials设置, 如果是same-origin后台接收不到cookies

        let query = `?query={
  user {
    addressList {
      userLastName
      userFirstName
      addressLine1
      addressLine2
      state
      city
      country
      zipCode
    }
  }
}`;

        let myHeaders = new Headers();
        myHeaders.append("Content-Type", "application/json");
        let myFetchOptions = {
             method: 'GET',
            credentials: 'same-origin'
            // mode: 'cors'
        };

        fetch(URLS.devApiUrl + query, myFetchOptions).then(res => res.json()).then(
            json => {
                console.log(json);
            }
        );

后台报错是找不到session。

如果尝试跨域credentials 改成 include。直接报错。http://szimg.mukewang.com/594a85590001cef805790115.jpg

 let query = `?query={
  user {
    addressList {
      userLastName
      userFirstName
      addressLine1
      addressLine2
      state
      city
      country
      zipCode
    }
  }
}`;

        let myHeaders = new Headers();
        myHeaders.append("Content-Type", "application/json");
        let myFetchOptions = {
             method: 'GET',
            credentials: 'include'
            // mode: 'cors'
        };

        fetch(URLS.devApiUrl + query, myFetchOptions).then(res => res.json()).then(
            json => {
                console.log(json);
            }
        );

不知道怎么解决了,主要是postman好用啊,尝试使用ajax也是好用的。那应该就是fetch设置问题,中英文都搜索过了,也基本都尝试了,没找到可行的。

写回答

2回答

Parry

2017-06-22

HTTP 是无状态的,也就是没有 session 的概念,session 的本质就是 cookie,需要自己实现。如 ASP.NET 等程序中的 session 都是框架实现好了的。

0
7
qq_靛岚_0
回复
Parry
找到我哪里错了,我在第一步验证用户名的时候没有配置credentials: 'include', fetch是需要所有关于cookies的地方都要加这个配置就可以了,不用单独去存cookies。谢谢老师。
2017-06-22
共7条回复

Parry

2017-06-22

你这里的 session 就是一个值的名称吧?

0
0

结合基础与实战学习React.js 独立开发新闻头条平台

轻松入门 React 开发,React Router 4 与 Webpack 2 完美升级项目

2768 学习 · 2126 问题

查看课程