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

前端技术 2023/09/10 JavaScript

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\');
});

本文地址:https://www.stayed.cn/item/26555

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。