node:<9>session认证机制

好了,上一期,我们讲到了浏览器访问服务器,如何认证的问题,使用cookie来识别,那么session就是识别的机器,所以我们这期来讲解一下session的应用;

在浏览器发起请求的时候,服务器收到该请求并且存储了一个cookie,然后再发送一个带有cookie的响应头,下次浏览器发送的时候就会带有这个cookie,然后服务器就会在内存中查找这个记录,如果有的话就响应响应的数据获取;

我们可以创建一个服务器来执行这种认证操作,用到的模块为express和express-sessiom模块:

1、安装两个模块

npm i express@4.17.1
npm i express-session

2、导入模块

//1.1 安装并导入模块
const express = require('express')
const session = require('express-session')

3、创建服务器,这个相信大家都会吧,不会的话就去看之前的博客

const express = require('express')
//1.2 创建一个服务器
const app = express()

//1.5 打开服务器
app.listen(8080,()=>{
    console.log('server  running at http://127.0.0.1:8080')
})

4、创建好了服务器,那么我们就通过浏览器发送post请求,其中带有body对象的表单,通过请求对象获取到表单数据,然后存储到请求对象的session对象中,根据现有的字符串来判断该表单数据是否符合条件:

//登录处理
app.post('/user/login',(req,res)=>{
    if(req.body.username != 'tony' || req.body.password != 1111){
        return console.log('登录失败')
    }else{

        //2.2 保存数据到session对象中
        //注意我们的数据要存储在req上
        req.session.username = req.body.username
        req.session.password = req.body.password

        //2.3 将登录状态返回给浏览器
        res.send({
            statu: 0 ,
            result:'登陆成功'
        })
    }
})

不过在这之前,我们需要挂载一个session中间件,如果没有挂载则不会有session这个对象:
 

//1.4 挂载中间件
app.use(session(
    {
        //这个字符串自定义
        secret:'test',
        resave:false,
        saveUninitialized:true
    }
))

这里除了secret是自己随意定义的字符串外,其他都是固定写法,复制即可;

5、之前我们讲过编码格式的问题,既然要使用表单,不要忘了挂载解析中间件:

//2.1 使用编码中间件
app.use(express.urlencoded({extended:false}))

这个要放在最前面

6、使用postman进行测试,使用命令编译,这里推荐使用 nodemon ./文件名

 可以看到提示成功,我这里提交的表单是和代码数据一致的,如果不一致:

 则会提示登陆失败;

下面是全部代码,除了这些其实还可以挂载很多中间件:

//1.1 安装并导入模块
const express = require('express')
const session = require('express-session')

//1.2 创建一个服务器
const app = express()

//2.1 使用编码中间件
app.use(express.urlencoded({extended:false}))

//1.4 挂载中间件
app.use(session(
    {
        //这个字符串自定义
        secret:'test',
        resave:false,
        saveUninitialized:true
    }
))

//1.3 挂载路由

//登录处理
app.post('/user/login',(req,res)=>{
    if(req.body.username != 'tony' || req.body.password != 1111){
        return console.log('登录失败')
    }else{

        //2.2 保存数据到session对象中
        //注意我们的数据要存储在req上
        req.session.username = req.body.username
        req.session.password = req.body.password

        //2.3 将登录状态返回给浏览器
        res.send({
            statu: 0 ,
            result:'登陆成功'
        })
    }
})

//检查处理
app.post('/user/logincheck',(req,res)=>{
    console.log(
        {
            'username':req.session.username,
            'password':req.session.password
        }
    )

    res.send({
        statu:0,
        result:'检查成功'
    })
})

//退出处理
app.post('/user/loginout',(req,res)=>{
    if(req.body.username == 'tony' && req.body.password == 1111 ){
            req.session.destroy()
            console.log('信息更新')
            res.send(
                {
                    statu:0,
                    result:'用户退出'
                }
            )
    }else{
        res.send(
            {
                statu:1,
                result:'退出失败'
            }
        )
    }
})

//1.5 打开服务器
app.listen(8080,()=>{
    console.log('server  running at http://127.0.0.1:8080')
})

好了,今天就这些内容,欢迎分享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编程学渣ズ

谢谢老板

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

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

打赏作者

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

抵扣说明:

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

余额充值