JWT 基本概念
生成 JWT Token
安装 jsonwebtoken
npm i -S jsonwebtoken
使用
const jwt = require('jsonwebtoken')
const { PRIVATE_KEY, JWT_EXPIRED } = require('../utils/constant')
login(username, password).then(user => {
if (!user || user.length === 0) {
new Result('登录失败').fail(res)
} else {
const token = jwt.sign(
{ username },
PRIVATE_KEY,
{ expiresIn: JWT_EXPIRED }
)
new Result({ token }, '登录成功').success(res)
}
})
这里需要定义 jwt 的私钥和过期时间,过期时间不宜过短,也不宜过长,课程里设置为 1 小时,实际业务中可根据场景来判断,通常建议不超过 24 小时,保密性要求高的业务可以设置为 1-2 小时:
module.exports = {
// ...
PRIVATE_KEY: 'admin_imooc_node_test_youbaobao_xyz',
JWT_EXPIRED: 60 * 60, // token失效时间
}
前端再次请求,结果如下:
{
"code":0,
"msg":"登录成功",
"data":{
"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiaWF0IjoxNTc0NDk1NzA0LCJleHAiOjE1NzQ0OTkzMDR9.9lnxdTn1MmMbKsPvhvRHDRIufbMcUD437CWjnoJsmfo"
}
}
我们可以将该 token 在 jwt.io
网站上进行验证,可以得到如下结果:
{
"username": "admin",
"iat": 1574495704,
"exp": 1574499304
}
可以看到 username 被正确解析,说明 token 生成成功
前端登录请求改造
修改 src/utils/request.js
: