📖Node使用jsonwebtoken制作一个会过期的token
那个后台管理的项目现在做到用户Token这一步了
这里使用的是 jsonwebtoken
1:安装 jsonwebtoken
- npm i jsonwebtoken
Node.js 后端设置
1.创建新的 JS 文件
- //token.js
- const jwt = require("jsonwebtoken");//引入jsonwebtoken
- const SECRETKEY = 'AEFU237AWSbsrfoif38fasj';//设置token私钥
- function Tokenverify(token){//用来解密token
- return jwt.verify(token, SECRETKEY, function(err,decode){
- if(err){
- return false;
- }else {//这里可以用解密出来的信息去跟sql的信息做一下比较是否正确,我这里就不比较了
- return decode;
- }
- })
- }
- function Settoken(newobj){//创建新的Token,expiresIn为Token的过期时间,这里是10秒
- return jwt.sign(newobj,SECRETKEY,{expiresIn:10});
- }
- module.exports = {Tokenverify,Settoken}//暴露两个方法
- //router.js
- const {Settoken} = require("./token/token.js")//引入方法
- router.post("/userlogin",(req,res) => {//用户登录
- let keysql ='select * FROM usertable where username = "'+req.body.from.name+'"';//查询该用户
- conn.query(keysql,(e,r)=>{
- if(e){
- console.log(e)
- return e;
- }
- let base = Buffer.from(req.body.from.pass, 'base64')//解密密码
- let pass = base.toString();
- if(r.length > 0){//查询有无此用户
- if(pass == r[0].password){//判断用户密码是否正确
- let newobj = {id:r[0].id,account:r[0].account,password:r[0].password}
- let token = Settoken(newobj);//获取token
- let data={body:r[0],token:token}
- res.json(new Result({code:200,msg:'登录成功',data:data}))//返回Token
- }else{
- res.json(new Result({code:500,msg:'密码错误!'}))
- }
- }else{
- res.json(new Result({code:500,msg:'未检测到该用户!'}))
- }
- })
- })
- module.exports = {router} //暴露router
- //app.js
- const {Tokenverify} = require("./token/token.js")
- const {router} = require('./router.js')//引入接口文件
- let no_router = ['/userlogin']//白名单
- app.use(async (req,res,next)=>{
- if (no_router.indexOf(req.url) != -1) {//说明此为白名单不需要验证 直接走下一个路由
- next();
- }else if(req.method == 'OPTIONS'){
- next();
- }else if(Tokenverify(req.headers.token)){//验证用户token
- next();//用户Token没问题
- }else{
- res.send({//报错,用户Token过期
- code: 4013,
- msg: '登陆信息失效,请重新登录'
- })
- }
- })
🧐发表评论