NodeJs零基础教程(五)

本次文章讲解nodejs的登录鉴权(jwt)相关内容

Session板块

下载express-session模块

npm install express-session

express-session最基础需要的参数如下

  • name 设置session存储时的名字,即cookie中的key值
  • secret 服务器生成session的签名,也就是加密时用的密钥
  • resave 是否将过期时间重新计算(也就是访问完接口后重新计算session过期时间)
  • saveUninitialized 强制初始化一个session存储,该session存储是无效的
  • cookie cookie对象,里面可以设置maxAge等参数
  • maxAge 设置最大过期时间

具体代码解释如下:

const express = require("express")
const session = require("express-session")
const app = express()
//注册session中间件
//以下参数都是必须需要的参数
app.use(session({
    name: "session_name",//设置session存储时的名字,即cookie中的key值
    secret: "this is session",//服务器生成session的签名,也就是加密时用的密钥
    resave: true,//是否将过期时间重新计算(也就是访问完接口后重新计算session过期时间)
    saveUninitialized: true,//强制初始化一个session存储,该session存储是无效的
    cookie: {
        maxAge: 1000 * 60 * 60,//设置最大过期时间
        secure: false//为true时候表示只有https协议才能访问cookie
    }
}))
//检验是否session存在
app.use((req, res, next) => {
    //排除login相关的路由和接口
    //如果请求的url中有login字符串,说明这是登录注册相关的操作,需要放行,不用校验session
    //否则会出现重定向次数过多的问题
    if (req.url.includes("login")) {
        next()
        return
    }
    //存在就放行
    if (req.session.user) {
        next()
    } else {
        //不存在就重定向到login页面
        res.redirect("/login")
    }
})
app.get("/", (req, res) => {
    //设置session,在session中存入一个user属性,user属性中存用户公开数据(不要存隐私数据)
    req.session.user = "zs"
    //打印出来还是zs,然后如果在我们登录后,就可以生成一个session,然后在后面每请求一个接口就可以对session进行一次校验
    //看看session是否存在,如果存在,正常返回数据
    //如果不存在,不返回数据
    res.send("ok----->" + req.session.user)
})
app.listen(3000, () => {
    console.log("服务启动")
})

JWT板块

下载jsonwebtoken模块

npm install jsonwebtoken

具体代码解释如下:

const express = require("express")
const app = express()
//引入jsonWebToken模块
const jsontoken = require("jsonwebtoken")
//设置密钥,用于加密token使用
const secret = "Hello!JWT!!"
//创建一个JWT对象,对象内部有一个生成token方法以及解析token方法
const JWT = {
    generate(value, expires) {
        //value:表示要放入token的数据,注意,这里必须是json格式数据
        //expires表示过期时间设置,单位为毫秒,10000为10秒
        return jsontoken.sign(value, secret, {expiresIn: expires})
    },
    verify(token) {
        try {
            //这里是将token传入函数然后再将secret传入,对token做解析,获取token中的数据
            return jsontoken.verify(token, secret)
        } catch (e) {
            return false
        }
    }
}
app.get("/", (req, res) => {
    //expires可用单位: s:秒 m:分钟 h:小时 d:天
    const token = JWT.generate({username: "罗辑"}, "1h");
    //token返回在header中,也就是说将token放在响应头中响应到前端
    //接下来我们只需要在前端获取到他后端响应头中的authorization就可以获取到token
    //然后在前端设置请求拦截器和响应拦截器,在请求发送之前将token放入header中,后端在对token进行校验即可
    //由于token是有过期时间的,所以我们需要在响应拦截器中实时的获取最新token并将其存入本地session中
    res.header("Authorization", token)
    // 后端获取前端传来的请求头中的token的具体写法: res.headers["authorization"]
    res.send("ok")
})
app.listen(3000)

以上就是nodejs登录鉴权相关的内容,欢迎各位评论教导,如果觉得文章还不错或者有什么地方不懂的,欢迎留言提问点赞🧡🤞🤞🤞🧡 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值