node: express + session + cookie的鉴权机制

一、准备工作:
1.本地安装redis库,我用的是菜鸟教程–提供的git连接上的 ‘Redis-x64-5.0.10.zip’版本;
2.安装好redis没问题后,跑起来别关cmd窗口
3.创建程序如下:
备注:session.js和redis.js放在同一个文件夹config下管理的;

创建express服务器: app.js文件

// 引入创建模块
const express = require('express')
const http = require('http')
const session = require('./config/session')
// 辅助模块
const path = require('path')
const badyParser = require('body-parser')
// 使用redis
// const redis = require('./config/redis')
// 创建服务器
const app = express()
const server = http.createServer(app)
// 解析
app.use(express.static(path.join(__dirname, '../views/dist')))
app.use(badyParser.json({ limit: '1024kb' }))
app.use(badyParser.urlencoded({ extended: true, limit: '1024kb' }))
// session
app.use(session)

// 后端路由配置
// app.use('/server', require('./routers'))
app.use('/login', (req, res) => {
	req.session.userinfo = '唐三'
	res.send('登录成功')
})

app.use('/record', (req, res) => {
	res.send(`${req.session.userinfo} 欢迎回来!!`)
})
app.use('/destory', (req, res) => {
	console.log(1, req.session.userinfo)
	req.session.destroy(err => {
		console.log(err)
		res.send('退出成功')
	})
})

// 错误处理中间件
app.use('*', (err, req, res, next) => {
	res.status(500).send('服务器正忙')
})
// 跑起来
server.listen(8686, () => {
	console.log('Server is running at http://localhost:8686');
})

创建session.js

const session = require('express-session')
const uid = require('uid-safe')
const RedisStore = require('connect-redis')(session)
const client = require('./redis')

module.exports = session({
	genid: req => uid.sync(18) + req.body.name,
	secret: 'zacahry',
	resave: false,
	saveUninitialized: false,
	rolling: true,
	cookie: {
		secure: false,
		maxAge: 5 * 60 * 1000,
		httpOnly: true,
		sameSite: true
	},
	store: new RedisStore({
		client: client,
		host: "127.0.0.1",
		port: 6379
	})
})

创建redis.js文件:

const redis = require("redis")

const client = redis.createClient({
	password: '在你准备的本地redis.conf中,requirepass 的值,不设置也行'
})

client.on('connect', _ => {
	console.log('redis连接成功!')
})
client.on("error", function (error) {
	console.error(error);
})

module.exports = client

二、测试步骤
1.redis库和程序跑起来后,在浏览器上输入
http://localhost:8686/login
结果:
在这里插入图片描述
访问:http://localhost:8686/record
结果:
在这里插入图片描述
访问:http://localhost:8686/destory
结果:
在这里插入图片描述
测试说明及结果验证说明:当前cookie设置有限期为5分钟,login以后==五分钟内通过record可以正常获取到‘唐三’欢迎回来!!‘ 5分钟后由于cookie失效的问题或者5分钟内执行过destory操作,页面反馈变成“undefined 欢迎回来!!” 说明此事cookie已经失效,测试成功!!

版权声明:技术乐在分享,如转载或使用本文内容,请附上本文链接。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值