Nodejs进阶:express+session实现简易登录身份认证

文档概览

本文基于express、express-session实现了简易的登录/登出功能,完整的代码示例可以在这里找到。

环境初始化

首先,初始化项目

然后,安装依赖。

接着,安装session相关的包。

session相关配置

配置如下,并不复杂,可以见代码注释,或者参考官方文档

var identityKey = 'skey';

app.use(session({
name: identityKey,secret: 'chyingp',// 用来对session id相关的cookie进行签名
store: new FileStore(),// 本地存储session(文本文件,也可以选择其他store,比如redis的)
saveUninitialized: false,// 是否自动保存未初始化的会话,建议false
resave: false,// 是否每次都重新保存会话,建议false
cookie: {
maxAge: 10 * 1000 // 有效期,单位是毫秒
}
}));

实现登录/登出接口

创建测试账户数据

首先,在本地创建个文件,来保存可用于登录的账户信息,避免创建链接数据库的繁琐。

登录、登出接口实现

实现登录、登出接口,其中:

  1. 登录:如果用户存在,则通过req.regenerate创建session,保存到本地,并通过Set-Cookie将session id保存到用户侧;
  2. 登出:销毁session,并清除cookie;
var findUser = function(name,password){
return users.find(function(item){
return item.name === name && item.password === password;
});
};

// 登录接口
app.post('/login',function(req,res,next){

var sess = req.session;
var user = findUser(req.body.name,req.body.password);

if(user){
req.session.regenerate(function(err) {
if(err){
return res.json({ret_code: 2,ret_msg: '登录失败'});
}

  req.session.loginUser = user.name;
  res.json({ret_code: 0,ret_msg: '登录成功'});              
});

}else{
res.json({ret_code: 1,ret_msg: '账号或密码错误'});
}
});

// 退出登录
app.get('/logout',next){
// 备注:这里用的 session-file-store 在destroy 方法里,并没有销毁cookie
// 所以客户端的 cookie 还是存在,导致的问题 --> 退出登陆后,服务端检测到cookie
// 然后去查找对应的 session 文件,报错
// session-file-store 本身的bug

req.session.destroy(function(err) {
if(err){
res.json({ret_code: 2,ret_msg: '退出登录失败'});
return;
}

// req.session.loginUser = null;
res.clearCookie(identityKey);
res.redirect('/');

});
});

登录态判断

用户访问 http://127.0.0.1:3000 时,判断用户是否登录,如果是,则调到用户详情界面(简陋无比);如果没有登录,则跳到登录界面;

res.render('index',{
isLogined: isLogined,name: loginUser || ''
});
});

UI界面

最后,看下登录、登出UI相关的代码。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

根据官网 入门 express
java叫接口control什么的app.get.post等等都是请求方式我们可...
为了前端丢进去的时候可以直接判断中间件就是经过了这个就会...
Express 文件的上传和下载
运行命令下载app.js 增加中间件。
基本模板来的 后面用后就有什么加什么都行。