Express + Node.js实现登录拦截器的实例代码


Posted in Javascript onJuly 01, 2017

介绍

这边的拦截器,对应于spring MVC中的filter,所有的http请求,通过拦截器处理之后才能访问到对应的代码/资源。

最典型的应用场景就是实现访问权限控制,给予不同的用户/用户组不同的页面和接口访问权限,仅能够访问允许的页面和接口。

场景

app.post('/login', function(request, res, next){
// do something
});
app.post('/getData',function(request, res, next){
// do something
  var data="some data";
  res.send({"data":data});
});

如果不做任何处理,任何人发送getData的post请求可以直接从后台读取数据,而不需要任何的登陆,只需要知道接口就可以。

对应每个接口,如果在每个接口下面加上权限判断,代码会非常的重复,于是面向切面就来了,可以通过把拦截器加在每个http请求之前,来实现权限判断的功能。

实现

// 所有用户可以访问index.html, error.html
// admin可以访问admin.html, /getData
// 登陆用户可以访问home.html
app.all('/*', function(request, res, next){
  // 思路:
  // 得到请求的url
  // 然后得到request的cookie,根据cookie得到当前登陆的用户
  // 判断用户对应url的权限
  var jsPattern=/\.js$/;
  var url=request.orignalUrl;
  if(jsPattern.test(url)){
  // 公共部分,放行
    next();
    return;
  }
  if(url=='index.html'||url=='error.html'){
    next();
    return;
  }
  var cookie=JSON.stringify(req.cookies);
  if(access){
    next();
  }
  else{
    res.redirect('error.html');
  }
});

实现思路:

1. 拦截所有请求(上面的就可以啦),得到当前访问的url

2. 根据cookie得到当前用户

3. 根据url和用户对应的身份来判断是否可以访问

4. 如果可以调用next();

5. 如果不能访问,返回错误信息

注意

  1. next(); 仅仅是一个函数,对应着原本处理请求的代码,如前面的app.post(‘/getData'),当这里的代码处理完成后会回到对应next(); 处,所以需要处理好对应的关系,如果必要需要return结束当前的函数,不然会出错哒。
  2. 对于公共的部分,如js插件,部分图片,还有css的部分,可以直接放行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
showModelessDialog()使用详解
Sep 07 Javascript
三分钟带你玩转jQuery.noConflict()
Feb 15 Javascript
AngularJs学习第八篇 过滤器filter创建
Jun 08 Javascript
jquery实现图片平滑滚动详解
Mar 22 jQuery
利用Vue v-model实现一个自定义的表单组件
Apr 27 Javascript
angularjs之$timeout指令详解
Jun 13 Javascript
JS重学系列之聊聊new操作符
Mar 04 Javascript
Nuxt v-bind绑定img src不显示的解决
Dec 05 Javascript
在vue中动态修改css其中一个属性值操作
Dec 07 Vue.js
vue中axios封装使用的完整教程
Mar 03 Vue.js
深入讲解Vue中父子组件通信与事件触发
Mar 22 Vue.js
vue实现input输入模糊查询的三种方式
Aug 14 Vue.js
详解node-ccap模块生成captcha验证码
Jul 01 #Javascript
vue元素实现动画过渡效果
Jul 01 #Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
Jun 30 #Javascript
node.js + socket.io 实现点对点随机匹配聊天
Jun 30 #Javascript
详解vue中computed 和 watch的异同
Jun 30 #Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
Jun 30 #Javascript
vue2.0 axios前后端数据处理实例代码
Jun 30 #Javascript
You might like
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
php实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
thinkPHP5.0框架环境变量配置方法
2017/03/17 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
JavaScript中的字符串操作详解
2013/11/12 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
jQuery简单实现中间浮窗效果
2016/09/04 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
设置cookie指定时间失效(实例代码)
2017/05/28 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
vue实现员工信息录入功能
2020/06/11 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
Python多进程机制实例详解
2015/07/02 Python
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
django 取消csrf限制的实例
2020/03/13 Python
如何用JQuery进行表单验证
2013/05/29 面试题
安全生产演讲稿
2014/05/09 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
工作失误检讨书范文
2015/01/26 职场文书
煤矿安全保证书
2015/02/27 职场文书
心理健康教育主题班会
2015/08/13 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书