当前位置: 首页 > 工具软件 > session.js > 使用案例 >

从零开始Node.js—13 session和token代码实现

充昌勋
2023-12-01

《从零开始Node.js—12 session与token区别》中介绍了这两种认证方法的原理,今天就来盘一盘具体实现

一、Session

安装中间件express-session,之后用req.session来存取用户信息

npm install express-session

服务器端代码index.js

// 1.引入express-session库
const session = require('express-session');

// 2.全局注册中间件
// 之后就可以对req.session进行读写了
app.use(session({
	secret: 'asyoulike',
	resave: false,
	saveUninitialized: true,
}))

// 暴露静态网页,点击网页上的按钮发送请求
app.use(express.static('./pages'))

// 3.用户信息写入req.session
req.session.user = req.body;
req.session.login = true;

// 4.读取req.session
// 浏览器发来请求中有cookie,服务器会取出cookie中的sessionID,然后将其对应的值放在req.session中
const user = req.session.user;

// 5.清除该session
req.session.destory();

前端无需额外设置,浏览器会读取响应中的set-cookie,在下次请求中自动携带未过期的cookie,开发者只需要保证前端页面和请求地址同源。

二、Token

需要安装两个包:
将用户信息加密生成token令牌:jsonwebtoken
将token解析成用户信息:express-jwt

npm install jsonwebtoken
npm install express-jwt

服务端代码index.js

// 1.导入 JWT 相关的两个包,分别是 jsonwebtoken 和 express-jwt
const jwt = require('jsonwebtoken');
const expressJWT = require('express-jwt');

// 2.生成token
const secretKey = 'as you like'
const token = jwt.sign({username: 'xiaomei'}, secretKey, {expiresIn: '1d'});

// 3.解析token
// 注册中间件,除了以api开头的接口都使用此中间件
app.use(expressJWT( {secret: secretKey, algorithms: ['HS526']}).unless({path: [/^\/api\//]}));

// 4.通过req.user解析出来存的信息
console.log(req.user) //{username: 'xiaomei'}

// 5. 捕获身份认证错误
app.use((err, req, res, next) => {
	if(err.name === 'UnauthorizedError'){ res.send(status: 1, msg: '身份认证失败,请重新登录')}
})

浏览器首次请求时,post请求的body中要提供用户的信息
浏览器再次请求时,设置请求头中Authorization参数为'Bear '+token

 类似资料: