node后端生成token及验证
// 首先是引入jsonwebtoken和生成token用的key(安全起见,存放在了系统环境变量TOKEN_KEY中,这是一种方法)
const jwt = require("jsonwebtoken");
const jwtKey = process.env.TOKEN_KEY;
// const jwtKey = fs.readFileSync("/path/../public.pub") // 这种更安全,直接将密钥读取出来使用,比如可以使用openSSL生成的
......
// 用户登陆正确时,服务器生成并返回token
app.post('/login', (req,res) => {
const {username, password} = req.body;
// 此处理省略从数据库获取用户名及密码信息,直接进行比对
if(username === database.username && password === database.password) {
// 用户登陆成功后跳转到其它页面时,无须再次输入用户名及密码等了,所以此处理服务器会生成并发送给用户一个token
jwt.sign(
{ username,... } // 除了pwd
jwtKey,
{ expiresIn: '30s' }, // 定义失效时间为30s
(err, token) => {
res.json({username, message:"登陆成功...", token})
}
)
}
})
......
// 此时前端拿到token后,可以将这个token存放到cookie或者authorization头部,方便再次发送请求时携带
// 此处理以放在authorization为例继续进行下一步的请求回复,以afterlogin为例
app.get('/afterlogin',(req,res)=>{
// 既然派发了token,那么就要在用户发起请求时先进行解析这个头部的token
const headers = req.headrs;
const token = headers['authorization'].split(' ')[1]; // 真正的token是在Bearer 后面的部分
jwt.verify(token, jwtKey, (err, payload)=>{ // 验证成功的话,会得到真正的负载内容payload
if(err) res.sendStatus(403); // 解析token错误的话,即验证错误时,返回403
// 如果解析正确的话,继续走下面的程序
res.json({message: '认证成功!',payload}) // 此处举例,但没有必要返回这个负载内容payload
})
})
分类:
node
标签:
node后端生成token及验证
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术