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 Web应用监听sock文件实例
Feb 18 NodeJs
Nodejs多站点切换Htpps协议详解及简单实例
Feb 23 NodeJs
nodejs 图片预览和上传的示例代码
Sep 30 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
基于nodejs res.end和res.send的区别
May 14 NodeJs
nodejs之koa2请求示例(GET,POST)
Aug 07 NodeJs
nodejs同步调用获取mysql数据时遇到的大坑
Mar 02 NodeJs
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
Mar 02 NodeJs
Nodejs核心模块之net和http的使用详解
Apr 02 NodeJs
Nodejs 识别图片类型的方法
Aug 15 NodeJs
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
Aug 20 NodeJs
nodejs处理tcp连接的核心流程
Feb 26 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中获取url与物理路径的总结
2013/06/21 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
JavaScript中的Object对象学习教程
2016/05/20 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
python的几种开发工具介绍
2007/03/07 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
实例讲解python中的序列化知识点
2018/10/08 Python
Python3数字求和的实例
2019/02/19 Python
Html5页面获取微信公众号的openid的方法
2020/05/12 HTML / CSS
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
医院总经理职责
2013/12/26 职场文书
大学总结自我鉴定
2014/01/18 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
工作分析计划书
2014/04/30 职场文书
搞笑的获奖感言
2014/08/16 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
先进教师个人总结
2015/02/11 职场文书
兴趣班停课通知
2015/04/24 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers