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中转换URL字符串与查询字符串详解
Nov 26 NodeJs
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 NodeJs
nodejs接入阿里大鱼短信验证码的方法
Jul 10 NodeJs
nodejs使用http模块发送get与post请求的方法示例
Jan 08 NodeJs
nodeJS服务器的创建和重新启动的实现方法
May 12 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
详解nodejs http请求相关总结
Mar 31 NodeJs
使用nodejs分离html文件里的js和css详解
Apr 12 NodeJs
nodejs一个简单的文件服务器的创建方法
Sep 13 NodeJs
通过实例了解Nodejs模块系统及require机制
Jul 16 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
一个用php3编写的简单计数器
2006/10/09 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
PHP实现从远程下载文件的方法
2015/03/12 PHP
PHP中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
PHP实现的同步推荐操作API接口案例分析
2016/11/30 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
用javascript动态调整iframe高度的方法
2007/03/06 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
jQuery实现鼠标滑过点击事件音效试听
2015/08/31 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
Python Grid使用和布局详解
2018/06/30 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
机械设计及其自动化专业推荐信
2013/10/31 职场文书
路政管理专业个人自荐信范文
2013/11/30 职场文书
社区七一党员活动方案
2014/01/25 职场文书
模具毕业生推荐信
2014/02/15 职场文书
银行服务明星推荐材料
2014/05/29 职场文书
住房租房协议书
2014/08/20 职场文书
辩护词格式
2015/05/22 职场文书
初中运动会前导词
2015/07/20 职场文书
粗暴解决CUDA out of memory的问题
2021/05/22 Python