Nodejs中session的简单使用及通过session实现身份验证的方法


Posted in NodeJs onFebruary 04, 2016

session 不用多介绍,使一个http可以对应一个终端用户。

session的本质使用cookie来实现。

原理大概是:http 带来服务端提前设置 cookie,服务端拿到标示用户身份的cookie, 再去固定地点(数据库,文件)检索出对应的用户身份。把身份赋值给本次请求的request,在程序处理中就知晓了用户的身份了。(在PHP,ASP或者其他服务端语言中都自动帮你实现了)

实现cookie

需要为每一个用户设置一个可以标示用户身份的cookie。可以使用如下规则

注册邮箱MD5值+密码MD5值+随机码MD5值。(仅仅举例,这可能并不是一个好的方案)

服务端代码片段:

res.setHeader("Set-Cookie", ["sid="+newUser.toCookie()+";path=/;domain="+config.domain+";expires="+new Date("2030") ]);

cookie

sid=275fccab7935736ff68c95c3ddbfaaee|275fccab7935736ff68c95c3ddbfaaee|275fccab7935736ff68c95c3ddbfaaee

使用 cookie 获取用户身份,设置session

把所有非静态资源的请求都定向到这里处理。获取cookie,把cookie拆分并在数据库查找符合条件的用户。最后使用 next 跳转到下一个请求逻辑。

下一个请求逻辑就可是直接使用 req.session.user 来获取 user 对象了。

session:function(req, res, next){
req.session = {};
if( req.cookies && req.cookies.sid ){
var a = req.cookies.sid.split("|");
var hexMail = a[0];
var hexPwd = a[1];
var hexRandom = a[2];
UserModel.hexFind(hexMail, hexPwd, hexRandom, function( status ){
//console.log("hexFind", status );
if(status.code == "0"){
//req.cookiesSelecter = cookiesSelecter;
req.session.user = status.result;
}
next();
});
}else{
next();
} 
}

下面给大家说说nodejs通过session实现身份验证

nodejs express session 身份验证

1)引入模块

var session = require('express-session');
var cookieParser = require('cookie-parser');

2)应用cookie及session

app.use(cookieParser());
app.use(session({
resave: true, // don't save session if unmodified
saveUninitialized: false, // don't create session until something stored
secret: 'love'
}));

3)请求时,应用身份验证

app.use(function(req,res,next){
if (!req.session.user) {
if(req.url=="/login"){
next();//如果请求的地址是登录则通过,进行下一个请求
}
else
{
res.redirect('/login');
}
} else if (req.session.user) {
next();
}
});

4)登陆设计

app.get('/login',function(req,res){
res.render("login");
});
app.post('/login',function(req,res){
if(req.body.username=="love" && req.body.password=="love"){
var user = {'username':'love'};
req.session.user = user;
res.redirect('/admin/app/list');
}
else
{
res.redirect('/login');
}
});
app.get('/logout',function(req,res){
req.session.user = null;
res.redirect('/login');
});
NodeJs 相关文章推荐
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
Jul 15 NodeJs
nodejs基础知识
Feb 03 NodeJs
nodejs基础应用
Feb 03 NodeJs
详解nodejs微信公众号开发——1.接入微信公众号
Apr 10 NodeJs
nodejs 终端打印进度条实例代码
Apr 22 NodeJs
详解Windows下安装Nodejs步骤
May 18 NodeJs
Express+Nodejs 下的登录拦截实现代码
Jul 01 NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 NodeJs
NodeJS加密解密及node-rsa加密解密用法详解
Oct 12 NodeJs
nodejs提示:cross-device link not permitted, rename错误的解决方法
Jun 10 NodeJs
NodeJs crypto加密制作token的实现代码
Nov 15 NodeJs
浅谈Node的内存泄露问题
May 06 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 #NodeJs
NodeJS实现阿里大鱼短信通知发送
Jan 17 #NodeJs
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 #NodeJs
Nodejs express框架一个工程中同时使用ejs模版和jade模版
Dec 28 #NodeJs
深入浅析NodeJs并发异步的回调处理
Dec 21 #NodeJs
基于nodejs+express(4.x+)实现文件上传功能
Nov 23 #NodeJs
Nodejs Express4.x开发框架随手笔记
Nov 23 #NodeJs
You might like
使用eAccelerator加密PHP程序
2008/10/03 PHP
php批量更改数据库表前缀实现方法
2013/10/26 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
js tab效果的实现代码
2009/12/26 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
2013/11/03 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
jQuery中slideUp()方法用法分析
2014/12/24 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
js 轮播效果实例分享
2016/12/28 Javascript
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
法国设计制造的扫帚和刷子:Andrée Jardin
2018/12/06 全球购物
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
教师党员个人整改措施
2014/10/27 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
在python中读取和写入CSV文件详情
2022/06/28 Python