node怎么做登录拦截?

更新日期: 2019-11-26阅读: 1.6k标签: 登录

利用 Express 中间件功能实现登录拦截。如果用户请求的路径需要登录后才能访问,将用户重定向到登录页面,登录成功后将用户重定向到原始请求路径。


node实现登录拦截的方法如下:

设置应用中间件,监控所有请求

// app.jsapp.use(function (req, res, next) {  if (req.session.user) {  // 判断用户是否登录
    next();
  } else {    // 解析用户请求的路径
    var arr = req.url.split('/');    // 去除 GET 请求路径上携带的参数
    for (var i = 0, length = arr.length; i < length; i++) {
      arr[i] = arr[i].split('?')[0];
    }    // 判断请求路径是否为根、登录、注册、登出,如果是不做拦截
    if (arr.length > 1 && arr[1] == '') {
      next();
    } 
    else if (arr.length > 2 && arr[1] == 'user' && 
    (arr[2] == 'register' || arr[2] == 'login' || arr[2] == 'logout'))
     {
      next();
    } else {  // 登录拦截
      req.session.originalUrl = req.originalUrl ? req.originalUrl : null;  // 记录用户原始请求路径
      req.flash('error', '请先登录');
      res.redirect('/user/login');  // 将用户重定向到登录页面
    }
  }
});

如果拦截规则复杂,可以将不被拦截的路径写入白名单,然后通过判断路径是否在白名单中来处理是否拦截;如果拦截规则简单,像以上代码中使用if else判断也可以满足要求。

登录成功后将用户重定向到原始请求路径

// routes/user.jsrouter.post('/login', function (req, res, next) {  // 判断用户名密码是否正确
  ......
  
  req.session.user = user;  // 将用户信息写入 session
  if (req.session.originalUrl) {  // 如果存在原始请求路径,将用户重定向到原始请求路径
    var redirectUrl = req.session.originalUrl;
    req.session.originalUrl = null;  // 清空 session 中存储的原始请求路径
  } else {  // 不存在原始请求路径,将用户重定向到根路径
    var redirectUrl = '/';
  }
  res.redirect(redirectUrl);
});

链接: https://www.fly63.com/article/detial/7737

Web登录其实没那么简单

一个简单的HTML例子看看用户信息安全:标准的HTML语法中,支持在form表单中使用<input></input>标签来创建一个HTTP提交的属性,现代的WEB登录中,form表单会在提交请求时,会获取form中input标签存在name的属性,作为HTTP请求的body中的参数传递给后台,进行登录校验。

了解一下第三方登录

在我们的日常生活中,登录一个网站或 APP 时经常会选择微信、 QQ 或其他账号登录。这种情况我们就称为第三方登录。那么第三方登录的实现机制是什么呢?

微信网页登录逻辑与实现

现在的网站开发,都绕不开微信登录(毕竟微信已经成为国民工具)。虽然文档已经写得很详细,但是对于没有经验的开发者还是容易踩坑。所以,专门记录一下微信网页认证的交互逻辑

网站接入QQ登录功能

本文中所说的QQ登录功能,是采用官方的OAuth2.0来实现的,这样有更多的自主权。另一种较为简单的JS-SDK开发方式,虽然非常简便,但自主性不够,所以没有采用。下文中所构造的URL,均使用了JavaScript的ES6语法。

什么是单点登录?

在日常工作中,用户需要访问大量的信息资源,例如,用户首先要登录到操作系统中,然后进入各个应用系统。进入每一个系统都需要对用户的身份进行识别与验证,这样,用户需要提供多个用户帐号与口令,为了便于记忆

uniapp登录流程详解uni.login

微信内嵌浏览器运行H5版时,可通过js sdk实现微信登陆,需要引入一个单独的js,详见 普通浏览器上实现微信登陆,并非开放API,需要向微信申请,仅个别开发者有此权限 H5平台的其他登陆,比如QQ登陆、微博登陆,uni-app未封装

Web登录认证类漏洞分析防御总结和安全验证机制设计探讨

做渗透测试有一段时间了,发现登录方面的问题特别多,想做个比较全面点的总结,我尽量写的全面点又适合新人,这篇文章可能需要点想象力,因为问题比较多我不可能去海找各种例子举出来

nodejs怎么实现登录认证?

当我们登录了一个网站,在没有退出登录的情况下,我们关闭了这个网站 ,过一段时间,再次打开这个网站,依然还会是登录状态。这是因为,当我们登录了一个网站,服务器会保存我们的登录状态,直到我们退出登录,或者保存的登录状态过期

单点登录是什么?三种情况的实现方式

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一,SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!