从0到1完成一个Node后端(express)项目(五、session、token)

往期

从0到1完成一个Node后端(express)项目(一、初始化项目、安装nodemon)
从0到1完成一个Node后端(express)项目(二、下载数据库、navicat、express连接数据库)
从0到1完成一个Node后端(express)项目(三、写接口、发起请求
从0到1完成一个Node后端(express)项目(四、路由、模块化、中间件、跨域)

Session

安装express-session中间件

npm install express-session

在这里插入图片描述

使用express-session

需要注意的是: 配置express-session一定要在app.use(router)挂载路由之前

const express = require('express')
const session = require('express-session')
const app = express()
app.use(express.urlencoded({ extended: true }));
app.use(express.json())

app.use(session({
    // 对session加密
    secret: 'shaka',
    resave: false,
    saveUninitialized: true
}))

app.post('/login', (req, res) => {
    if (req.body.username !== 'shaka' && req.body.password !== '123456') {
        return res.send('登陆失败')
    }
    // 把数据存储到session中
    req.session.user = req.body //用户信息
    req.session.isLogin = true //登陆状态
    res.send({ status: 200, message: '登陆成功' })
})

// 我们通过获取存储到session的数据来做一些处理
app.get('/username', (req, res) => {
    if (!req.session.isLogin) {
        return res.send({ status: 500, msg: '未登录' })
    }
    res.send({
        status: 200,
        msg: '请求成功',
        username: req.session.user.username
    })
})
// 清空session
// 退出登陆
app.post('/out', (req, res) => {
    // 销毁session
    req.session.destroy()
    res.send({
        status: 200,
        msg: '退出成功'
    })
})

app.listen(8888, () => {
    console.log('express服务器启动成功');
})


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当我们清空session后

在这里插入图片描述

token

安装jsonwebtoken、express-jwt

npm install jsonwebtoken express-jwt

jsonwebtoken用来生成token
express-jwt用来还原成JSON对象

在这里插入图片描述

使用

const express = require('express')
const app = express()
const jwt = require('jsonwebtoken')
const expressJWT = require('express-jwt')
const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: false }))
app.use(express.json())


// 定义密钥
const secretKey = 'shaka'
app.use(expressJWT.expressjwt({ secret: secretKey, algorithms: ["HS256"] }).unless({ path: [/^\/api\//] }))

app.post('/api/login', (req, res) => {
    const userinfo = req.body
    console.log(userinfo);
    if (userinfo.username !== 'shaka' && userinfo.password !== '12345') {
        return res.send({
            status: 400,
            message: '登陆失败'
        })
    }
    // 登陆成功
    // jwt.sign三个参数用来生成jwt字符串
    // 1、信息
    // 2、密钥
    // 3、配置token有效期
    const tokenStr = jwt.sign({ username: userinfo.username }, secretKey, { expiresIn: '30s' })
    res.send({
        status: 200,
        message: '登陆成功',
        token: tokenStr
    })
})

app.use((err, req, res, next) => {
    if (err.name === 'UnauthorizedError') {
        return res.send({
            status: 400,
            mnessage: 'token无效'
        })
    }
    res.send({
        status: 500,
        message: '未知错误'
    })
})

app.listen(8888, () => {
    console.log('express服务器启动成功');
})


在这里插入图片描述
完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多多@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值