nodejs身份认证机制session

jwt和session二者区别

  • session是把身份信息存在服务端的,jwt是存在客户端的
  • session有跨域问题,jwt没有跨域问题

session

安装express-session

npm i express-session

配置中间件

// 导入express模块
const express = require('express')
    // 导入express-session
const session = require('express-session')
const app = express()
    // 配置session中间件
app.use(session({
        secret: 'asse', //secret 属性值可以是任意字符串
        resave: false, //固定写法
        saveUninitialized: true //固定写法
    }))

托管静态文件在本地防止跨域

    // 托管文件
app.use(express.static('../html'))
    // 使用中间件设置请求体数据
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
//防止乱码
app.use((request, response, next) => {
    response.setHeader('Content-Type', 'text/html; charset=utf-8')
    next()
})

把身份信息储存在服务端

app.post('/api/login', (request, response) => {
    if (request.body.username != 'admin' || request.body.password != '0000') {
        return response.send({
            status: 1,
            msg: "登陆失败"
        })
    }
   // 设置session
    request.session.userInfo = request.body
    request.session.islogin = true
    response.send({
        status: 0,
        msg: "登陆成功",
        username: request.session.userInfo.username
    })
})
app.get('/api/user', (request, response) => {
    if (!request.session.islogin) {
        return response.send({
            status: 1,
            msg: '获取失败'
        })
    }
    response.send({
        status: 0,
        msg: '登陆成功',
        username: request.session.userInfo.username
    })
})

清除缓存(只会清除当前用户)


app.post('/api/logout', (request, response) => {
        //清空缓存, 只会清空当前用户不会清空其它用户
        request.session.destroy()
        response.send({
            status: 1,
            msg: '用户退出成功'
        })
    })
    // 错误中间件写在后边,四个参数,防止程序崩溃
app.use((erro, res, req, next) => {
    req.send("错误的请求" + erro.message)
})
app.listen(8890, () => {
    console.log('启动成功')
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值