express+session实现简易身份认证
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,环境初始化首先,初始化项目express -e然后,安装依赖。npm install接着,安装session相关的包。npm install --save express-session sessio
千家信息网最后更新 2025年12月01日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安全错误
数据库的锁怎样保障安全
重点行业数据库包括多少行业
英泰软件开发学校
龍鼎软件开发
网络安全生产月情况说明
互联网高科技公司起名
网络技术费如何做会计分录
mac桌面软件开发入门
数据库有数据但输出没有显示
冷酷灵魂怎么总是连接不到服务器
那一些企业需要软件开发
徐汇区app软件开发定做价格
网络技术应用试题整理
幼儿园网络安全相关标语口号
苏州百卓网络技术招聘
小学生国家网络安全班会PPT
考试资料网网络技术
数据库排他锁共享锁
5G网络技术不统一
珠海搞网络安全的公司
网络科技和工业互联网
为什么方舟服务器
哈弗f 7听音乐连接不上服务器
如何用手机发信息文件到服务器去
方程式网络技术支持
个人服务器名称叫什么好
access如何关闭数据库
sql数据库最近日期
网络安全周主题党日通知
软件开发介绍视频教程
虚拟服务器管理软件选哪家