Nodejs中session的简单使用及通过session实现身份验证的方法
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="+newDate("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){
vara=req.cookies.sid.split("|");
varhexMail=a[0];
varhexPwd=a[1];
varhexRandom=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实现身份验证
nodejsexpresssession身份验证
1)引入模块
varsession=require('express-session');
varcookieParser=require('cookie-parser');
2)应用cookie及session
app.use(cookieParser());
app.use(session({
resave:true,//don'tsavesessionifunmodified
saveUninitialized:false,//don'tcreatesessionuntilsomethingstored
secret:'love'
}));
3)请求时,应用身份验证
app.use(function(req,res,next){
if(!req.session.user){
if(req.url=="/login"){
next();//如果请求的地址是登录则通过,进行下一个请求
}
else
{
res.redirect('/login');
}
}elseif(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"){
varuser={'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');
});