express+session实现简易身份认证
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,环境初始化首先,初始化项目express -e然后,安装依赖。npm install接着,安装session相关的包。npm install --save express-session sessio
千家信息网最后更新 2025年01月20日express+session实现简易身份认证
环境初始化
首先,初始化项目
express -e
然后,安装依赖。
npm install
接着,安装session相关的包。
npm install --save express-session session-file-store
session相关配置
配置如下,并不复杂,可以见代码注释,或者参考官方文档。
var express = require('express');var app = express();var session = require('express-session');var FileStore = require('session-file-store')(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 // 有效期,单位是毫秒 }}));
实现登录/登出接口
创建测试账户数据
首先,在本地创建个文件,来保存可用于登录的账户信息,避免创建链接数据库的繁琐。
// users.jsmodule.exports = { items: [ {name: 'chyingp', password: '123456'} ]};
登录、登出接口实现
实现登录、登出接口,其中:
登录:如果用户存在,则通过
req.regenerate
创建session,保存到本地,并通过Set-Cookie
将session id保存到用户侧;登出:销毁session,并清除cookie;
var users = require('./users').items;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', function(req, res, 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 时,判断用户是否登录,如果是,则调到用户详情界面(简陋无比);如果没有登录,则跳到登录界面;
app.get('/', function(req, res, next){ var sess = req.session; var loginUser = sess.loginUser; var isLogined = !!loginUser; res.render('index', { isLogined: isLogined, name: loginUser || '' });});
UI界面
最后,看下登录、登出UI相关的代码。
<% } %>会话管理 会话管理
<% if(isLogined){ %>当前登录用户:<%= name %>,退出登陆
<% }else{ %>
登录
用户
接口
文件
界面
代码
建议
数据
账户
登陆
管理
配置
复杂
有效
简陋
成功
繁琐
信息
单位
备注
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
geegee手机号注册服务器繁忙
北纬三零网络技术
美图手机怎么删除所有数据库
软件开发适合什么配置的电脑
北京文岩远航网络技术有限公司
上海综合软件开发价格合理
博物馆云平台软件开发
数据库tno是指课程名吗
服务器末端防护安装方式
网络服务器安全技术
网络安全审查大概多久
软件开发属于什么征收品目
服务器 耗电
数据库只能操作只能的数据库
数据库聚合查询
华强北三星服务器内存
湖北数据库空投箱出厂价格
软件开发用i5和i7
数据库最新技术基础
阿里云虚机数据库不够
旺旺吧是什么数据库
河南林业计算机网络技术
网络安全那些大学好
字段的信息在数据库引擎中
中国知网数据库包含哪些
吉林软件开发培训
武汉腾讯数据库研发
java连接2个数据库
相声稿子主题网络安全
我的世界花雨庭空岛服务器