Express+Nodejs 下的登录拦截实现

  利用商城举例,在商城中没有登录之前,可以看商品列表、详情、登录或者注册都可以,但是购买的时候是不行的,那么这个功能在Node后台中是怎么实现的呢,这个功能可以由前端去在前台实现,但是不安全,本文今天讲解,Node 的全局拦截的实现。

  在node项目中,打开 app.js ,我们可以看到

// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = ;
next(err);
}); // error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page
res.status(err.status || );
res.render('error');
});

我们可以看到,监听了全局的 404 错误,那么我们可以借鉴这个方法去全局监听 登录这个功能,实现全局的拦截。

在所有的路由前边,添加全局拦截

// 设置全局拦截
app.use((req, res, next) => {
if(req.cookies.userId){
// userId 存在,也就是登录了,那就不拦截继续执行
next();
}else{
/**
* userId 不存在,也就是没有登录了
* 这个时候 让不登录的接口 能继续调用,其他的一切接口全部禁用,这样就实现了,没有登录什么都调用不了
* req.originalUrl 当前接口地址
* goods 作介绍,查询商品的时候,后边会与很多的参数,第几页多少数据排序等等这个时候,req.originalUrl 就不行了,这个获取不到后边的参数
* 有两种方法
* 1、req.originalUrl.indexOf('/goods') > -1
* 2、获取不带参数的 url 地址 req.path
*/
// if(req.originalUrl == '/users/login' || req.originalUrl == '/users/loginOut' || req.originalUrl.indexOf('/goods/list') > -1 ){
if(req.originalUrl == '/users/login' || req.originalUrl == '/users/loginOut' || req.path == '/goods/list' ){
next();
}else{
res.json({
status: '',
msg: "当前未登录",
result:''
});
}
}
});

在这里使用的都是后台的 cookie 存储,可以使用后台的 session 。

Node 的登录接口代码

/**
* login
* 以及路由是 users 这里路径就不写 users 了
*/
router.post('/login', function(req, res, next) {
var param = {
userName: req.body.userName,
userPwd: req.body.userPwd
};
// 通过 mongoose 查找修改数据库
User.findOne(param, (err, doc) => {
if(err){
res.json({
status: "1",
msg: err.message
});
}else{
// 接口调用成功
if(doc){
// 保存到 cookie
res.cookie("userId", doc.userId, {
path: '/',
maxAge: 1000*60*60
});
res.cookie("userName", doc.userName, {
path: '/',
maxAge: 1000*60*60
});
// 保存 session,先要安装 express-session插件
// req.session.user = doc;
res.json({
status: "0",
msg: "",
result: {
userName: doc.userName
}
});
}
}
});
});

  

Express+Nodejs 下的登录拦截实现的更多相关文章

  1. nodejs+express中设置登录拦截器

    在nodejs+express中,采用nodejs后端路由控制用户登录后,为了加强前端的安全性控制,阻止用户通过在浏览器地址栏中输入地址访问后台接口,在app.js中需要加入拦截器进行拦截: /*** ...

  2. node express 登录拦截器 request接口请求

    1.拦截器 拦截器可以根据需要 做权限拦截 登录只是权限的一种, 思路是req.session.user判断用户session是否存在,是否是需要拦截的地址, 如果是就跳转登录页,或其他页, 如果非需 ...

  3. nodejs下express+ejs环境搭建

    nodejs下express+ejs环境搭建   分类: Nodejs 1.进入需要创建项目的目录    cd F:\nodeCode     2.创建一个带ejs模板工程,工程名为haha    e ...

  4. vue+axios 前端实现登录拦截(路由拦截、http拦截)

    一.路由拦截 登录拦截逻辑 第一步:路由拦截 首先在定义路由的时候就需要多添加一个自定义字段requireAuth,用于判断该路由的访问是否需要登录.如果用户已经登录,则顺利进入路由, 否则就进入登录 ...

  5. ASP.NET MVC如何做一个简单的非法登录拦截

    摘要:做网站的时候,经常碰到这种问题,一个没登录的用户,却可以通过localhost:23244/Main/Index的方式进入到网站的内部,查看网站的信息.我们知道,这是极不安全的,那么如何对这样的 ...

  6. SpringBoot Web开发(5) 开发页面国际化+登录拦截

    SpringBoot Web开发(5) 开发页面国际化+登录拦截 一.页面国际化 页面国际化目的:根据浏览器语言设置的信息对页面信息进行切换,或者用户点击链接自行对页面语言信息进行切换. **效果演示 ...

  7. 【转】vue+axios 前端实现登录拦截(路由拦截、http拦截)

    一.路由拦截 登录拦截逻辑 第一步:路由拦截 首先在定义路由的时候就需要多添加一个自定义字段requireAuth,用于判断该路由的访问是否需要登录.如果用户已经登录,则顺利进入路由, 否则就进入登录 ...

  8. NodeJS旅程 : express - nodejs MVC 中的王牌

    express 正如ASP.NET MVC 在作为.net平台下最佳的 Mvc框架的地位一样,express在 node.js 环境也有着相同的重要性.在百度上 "nodejs expres ...

  9. 在springMVC中使用自定义注解来进行登录拦截控制

    1:java注解使用是相当频繁,特别是在搭建一些框架时,用到类的反射获取方法和属性,用的尤其多. java中元注解有四个: @Retention     @Target     @Document  ...

随机推荐

  1. wmpnetwk.exe怎么禁启动

    Win7控制面板--管理工具--服务,找到并选中"Windows Media Player Network Sharing Service"服务,右键点"属性" ...

  2. PHP中echo和print的区别

    这篇文章主要介绍了PHP中echo和print的区别,针对二者使用中常见的用法区别进行了较为深入的总结与分析,需要的朋友可以参考下 一般来说,PHP中动态输出HTML内容,是通过print 和 ech ...

  3. Spring Data Jpa-动态查询条件

    /** * * 查看日志列表-按照时间倒序排列 * * @author: wyc * @createTime: 2017年4月20日 下午4:24:43 * @history: * @return L ...

  4. jq 抽奖

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  5. maven出现不再支持源选项 1.5。请使用 1.6 或更高版本

    maven出现不再支持源选项 1.5.请使用 1.6 或更高版本 学习了:http://blog.csdn.net/sosous/article/details/78312867 错误: [ERROR ...

  6. PHP中JSON的应用

    文章来源:PHP开发学习门户 地址:  http://www.phpthinking.com/archives/513 互联网的今天,AJAX已经不是什么陌生的词汇了.说起AJAX,可能会马上想起因R ...

  7. 升级DM5校验

    1,将某个文件生成带DM5的文件,使用srec_cat工具: read A   #原始文件 srec_cat $A -o 要生成的文件名称  -Line_Length 46 -Address_Leng ...

  8. 自定义列标题 case when

    set@schoolid=41;select l.StartTime,l.EndTime,c.EntranceYear as 入学级,cg.Grade as 年级,c.ClassName as 班级名 ...

  9. SerializeUtil 序列化,反序列化工具类

    package cloud.app.prod.home.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutp ...

  10. The Elder HDU - 5956

    /* 树上斜率优化 一开始想的是构造出一个序列 转化成一般的dp但是可能被卡 扫把状的树的话可能变成n*n 其实可以直接在树上维护这个单调队列 dfs虽然搞得是一棵树,但是每次都是dfs到的都是一个序 ...