Node.js 实现用户登陆 session

简介: Node.js 实现用户登陆 session

Node.js实现session

关于session

由于HTTP是一种无状态协议,所以无法在请求中保存用户登陆状态。

session是是通过服务端保存的一个表结构来对应用户登陆状态,其在客户端的呈现就是cookie。

其原理大概是这样:用户登陆以后服务端会自动生成一个较长的不重复随机数,及session,用该session作为key,用户信息及其他信息作为value,保存在内存或者数据库中,方便查询。服务端用setCookie的方式将session通过http返回给客户端并将session保存在浏览器的cookie中。下次客户端发起其他非登陆请求时会携带此cookie,到了服务端以后通过查阅之前的session表得知用户登陆状态并在成功的情况下得到用户信息。

session的实现

这里我们用到两个模块,分别是express-session以及cookie-parser。

用中间件到方式将cookie-parser加入到express中去,用以解析cookie,即得到session。

let cookieParser = require('cookie-parser');
app.use(cookieParser());

再加入express-session中间件。

let session = require('express-session');
app.use(session({
        resave: false,
        rolling: false,
        saveUninitialized: true,
        secret: RandomSecret(),
        name: 'H5Session',
        cookie: { maxAge: 60 * 1000}
    }));

接着自己写一个中间件用以过滤请求。

这里给出我自己项目的代码,

成功登陆以后,给req.session.user赋值。

在登陆以及注册请求是不需要校验的,直接next,有session的也next,走向下一个中间件,这段代码需要放在route代码之前。非登陆及注册请求的没有session的请求直接返回用户权限异常提示。

req.session.user = {'userName': params.userName};
app.use(function(req,res,next){
  if (!req.session.user) {
    if (req.url === '/H5/Login' || req.url === '/H5/Register') {
      next();/*请求为登陆或者注册则不需要校验session*/
    }
    else{
      res.json({result: false, content: '用户权限异常'});
    }
  }
  else if (req.session.user) {
    next();
  };
})
目录
相关文章
|
3天前
|
JavaScript 数据安全/隐私保护
|
9月前
|
存储 数据采集 前端开发
Node.js----前后端的身份认证(session与jwt)(一)
Node.js----前后端的身份认证(session与jwt)
|
前端开发 JavaScript
HTML+CSS+JS 实现一个漂亮的登陆页面
HTML+CSS+JS 实现一个漂亮的登陆页面
414 1
HTML+CSS+JS 实现一个漂亮的登陆页面
|
9月前
|
存储 JSON 前端开发
Node.js----前后端的身份认证(session与jwt)(二)
Node.js----前后端的身份认证(session与jwt)(二)
|
11月前
|
NoSQL JavaScript 前端开发
【Node.js实战】一文带你开发博客项目之Koa2重构(实现session、开发路由、联调、日志)
【Node.js实战】一文带你开发博客项目之Koa2重构(实现session、开发路由、联调、日志)
193 0
|
11月前
|
存储 NoSQL JavaScript
【Node.js实战】一文带你开发博客项目之Express重构(初始化环境,处理 session,连接 redis)
【Node.js实战】一文带你开发博客项目之Express重构(初始化环境,处理 session,连接 redis)
152 0
|
11月前
|
NoSQL JavaScript 关系型数据库
【Node.js实战】一文带你开发博客项目之登录(对接完毕,cookie、session、redis各司其职)
【Node.js实战】一文带你开发博客项目之登录(对接完毕,cookie、session、redis各司其职)
114 0
|
JavaScript 中间件
node.js express使用session
node.js express使用session
|
JavaScript 前端开发 中间件
技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-12-4.登陆的前端vue-router路由验证(导航守卫)
上篇文章我们发现有些不使用任何接口的页面,在不登陆状态下是可以进行访问的,所以本篇文章解决一下这个问题。
174 0
技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-12-4.登陆的前端vue-router路由验证(导航守卫)
|
存储 JSON 前端开发
技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-12-3.登陆的token验证(校验登录)
token验证的实现方式很简单,只需要在所有后端接口中添加一个验证是否存在token的中间件即可,接口的访问过程是调用→运行→返回数据。所以我们在接口调用之后、运行之前的位置加一个验证token的函数作为接口的中间件,从而验证到非登录人员,将其页面跳转到登陆页面即可。
492 0
技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-12-3.登陆的token验证(校验登录)