node学习(六)jwt生成以及权限

故心故心故心故心小故冲啊



1.生成jwt并返回

生成jwt

 getJwt: function (data) {
        return jwt.sign(data, constant.secret, {
            expiresIn: '1d'  //单位 毫秒  1d-1天
        })
    },

返回前端

//生成jwt的数据

var d = {
   id: data.id,
  account: data.account,
 };
 //生成jwt
 let token = userCtrl.getJwt(d);
 resp.json({ code: 200, data: data, token: token });

2.权限验证(令牌token)

token判断
1.判断是否为预请求 =>放行
2.判断时候在登录url =>放行
3.如果请求头有token =>解钥 =>token无效(自己操作的) token有效 =>过期了 token正确=> 放行
4.无token =>请登录

var checkLogin = (req, res, next) => {
        //跨域试探  预请求
        if (req.method === 'OPTIONS') {
            resp.send({})
        } else if (req.originalUrl === '/api/user/login') {
            next();
        } else if (req.headers.hasOwnProperty("token")) {
            // 解钥
            jwt.verify(req.headers.token, constant.secret, function (err, decode) {
                if (err) {
                    // token无效(自己操作的)
                    if (err.name === 'JsonWebTokenError') {
                        console.log(err.name)
                        res.send("token无效,请重新登录")
                    }
                    // token有效 =>过期了
                    if (err.name === 'TokenExpiredError') {
                        // 若token刚过期且还在使用 需要重新生成新token
                        // 过期时间(分钟)=现在时间-过期时间
                        //new.Data().getTime()现在时间的时间戳
                        //err.expiredAt.getTime() 过期的时间戳
                        //(1000*60)  /1000转化为秒   /60转为分
                        //toFixed(2) 保留2位小数
                        let expiredTime = ((new Date().getTime() - err.expiredAt.getTime()) / (1000 * 60)).toFixed(2);
                        // console.log(new Date().getTime());
                        // console.log(err.expiredAt.getTime());
                        if (expiredTime <= 30) {
                            //前端code==20002表示要更新token
                            res.send("生成新token,请客户端更新token")
                        } else {
                            res.send("token过期了!请重新登录!")
                        }
                    }

                } else {
                    //解钥没有问题  token正确=> 放行
                    next();
                }
            })

        } else {
            res.send("没有token,请重新登录")
        }
    }
    app.use(checkLogin);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值