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 相关文章推荐
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
May 03 Javascript
基于jquery的跨域调用文件
Nov 19 Javascript
浅析return false的正确使用
Nov 04 Javascript
JS从数组中随机取出几个数组元素的方法
Aug 02 Javascript
基于JavaScript实现点击页面任何位置返回
Aug 31 Javascript
jstl中判断list中是否包含某个值的简单方法
Oct 14 Javascript
jQuery图片加载显示loading效果
Nov 04 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
Apr 13 Javascript
Angular4绑定html内容出现警告的处理方法
Nov 03 Javascript
Vue.js添加组件操作示例
Jun 13 Javascript
javascript json字符串到json对象转义问题
Jan 22 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
Dec 24 Javascript
详解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
PHP连接SQLServer2005的方法
2015/01/27 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
Angular之指令Directive用法详解
2017/03/01 Javascript
VUE实现日历组件功能
2017/03/13 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
Python解释执行原理分析
2014/08/22 Python
详解Python中find()方法的使用
2015/05/18 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
2018/06/11 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
Python 2种方法求某个范围内的所有素数(质数)
2020/01/31 Python
python实现滑雪游戏
2020/02/22 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
Python的in,is和id函数代码实例
2020/04/18 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
银行服务感言
2014/03/01 职场文书
卖车协议书
2014/04/21 职场文书
小学优秀辅导员事迹材料
2014/05/11 职场文书
喝酒驾驶检讨书
2014/10/01 职场文书
2014年房地产销售工作总结
2014/12/01 职场文书
鼋头渚导游词
2015/02/05 职场文书
2014年底个人工作总结
2015/03/10 职场文书
关于运动会的广播稿
2015/08/19 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server
Vue深入理解插槽slot的使用
2022/08/05 Vue.js