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 模块开发及发布详解分享
Mar 07 NodeJs
使用nodejs、Python写的一个简易HTTP静态文件服务器
Jul 18 NodeJs
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
Sep 26 NodeJs
Nodejs实战心得之eventproxy模块控制并发
Oct 27 NodeJs
基于html5和nodejs相结合实现websocket即使通讯
Nov 19 NodeJs
nodejs服务搭建教程 nodejs访问本地站点文件
Apr 07 NodeJs
详解nodejs微信公众号开发——3.封装消息响应模块
Apr 10 NodeJs
NodeJS创建最简单的HTTP服务器
May 15 NodeJs
详解使用nodeJs安装Vue-cli
May 17 NodeJs
原生nodejs使用websocket代码分享
Apr 07 NodeJs
Nodejs异步回调之异常处理实例分析
Jun 22 NodeJs
浅谈使用nodejs搭建web服务器的过程
Jul 20 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
PHP实现活动人选抽奖功能
2017/04/19 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
JavaScript实现更改网页背景与字体颜色的方法
2015/02/02 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
基于Vue SEO的四种方案(小结)
2019/07/01 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
JavaScript中的类型检查
2020/02/03 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
python 快速排序代码
2009/11/23 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
Pytest mark使用实例及原理解析
2020/02/22 Python
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
2014/10/20 HTML / CSS
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
最新结婚典礼主持词
2014/03/14 职场文书
护士个人自我鉴定
2014/03/24 职场文书
法制报告会主持词
2014/04/02 职场文书
暑期培训心得体会
2014/09/02 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
见习报告格式范文
2014/11/08 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
5行Python代码实现一键批量扣图
2021/06/29 Python
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers