express-session通过设置req.session.user不生效的问题

  之前跟着网上一个教程做了一个nodeJS+mongoDB的博客系统,原教程使用的是ejs的模板,为了结合现在前后端分离的开发,自行想把他改成restful API形式,刚开始就遇到如题的问题。

  查询列表什么的还没什么,当需要登录权限的时候就出问题了,node在登录后回将session保存在req.session.user上,在后面需要权限的时候去取出来验证,如果有req.session.user则通过验证,如果没有则提示登录。我在登录后能正确提示成功,但是到需要验证的功能上还是不能通过权限验证,通过google发现,在请求的时候没有带cookies,所以服务器不能认为你是一个已经登录的用户。以上是原因,以下是我在工程中的实现原理:

//项目中使用的是axios进行数据请求,在main.js中进行全局设置
axios.defaults.withCredentials= true;  

  另外在设置携带cookies进行请求的时候,后端跨域Access-Control-Allow-Origin不能设置为*,因为 '*' 会和 Access-Control-Allow-Credentials:true 冲突(Access-Control-Allow-Credentials:true也是必带的),需配置指定的地址。以下是我的服务端跨域设置:

app.all('*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "http://localhost:8080");
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header('Access-Control-Allow-Credentials', 'true');
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  next();
});

另外

  以前遇到的一个问题,顺便在此记录以下,当传输的数据(前端向服务器端传递数据)中含有数组的时候,在服务端接收的是[ Object Object ]或者[ data ]等情况,在前端设置traditional:true属性即可。

你可能感兴趣的:(express-session通过设置req.session.user不生效的问题)