美文网首页我爱编程
express-session通过设置req.session.u

express-session通过设置req.session.u

作者: 小金子_web | 来源:发表于2018-03-22 17:29 被阅读0次

      之前跟着网上一个教程做了一个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.u

        本文链接:https://www.haomeiwen.com/subject/dhzaqftx.html