本次文章讲解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登录鉴权相关的内容,欢迎各位评论教导,如果觉得文章还不错或者有什么地方不懂的,欢迎留言提问点赞🧡🤞🤞🤞🧡