Node Express 之token的封装和使用

概述:

Token 是在服务端产生的,当客户端传来的用户名/密码验证通过时,就会在服务器端生成一个Token返回给客户端,这个Token中包含了用户信息、过期时间等信息。客户端接收到返回的token后将其保存,在有效时间内客户端向服务器端发送请求时只需要带上这个token即可,无需再带上用户名和密码。

安装

npm install jsonwebtoken express-jwt -S

封装

var jwt = require('jsonwebtoken');


/*
 生成token  参数
       payload:基本信息
       secretOrPrivateKey:密钥  casuallaborer
       options:时效
*/
exports.createToken=function (payload,secretOrPrivateKey,options) {
    return new Promise((resolve,reject)=>{
        const token =jwt.sign(payload,secretOrPrivateKey,options);
        resolve(token);
    })

};

/*
    验证token
        token:token值
        secretOrPrivateKey:密钥
 */

exports.verifyToken=function(token,secretOrPrivateKey){
    return new Promise((resolve,reject)=>{
        const info=jwt.verify(token.split(' ')[1],secretOrPrivateKey);
        resolve(info);
    })
}


使用

在入口文件app.js 引用,方便每次请求就会验证token

//...省略
var expressJwt =require('express-jwt');
var token=require('./tools/token');

app.all('*', (req, res, next) => {
  res.header("Access-Control-Allow-Origin", "*");
  // 特别注意需要加上Authorization,   前端要用Bearer token的格式
  res.header("Access-Control-Allow-Headers", "content-type,Authorization,X-Requested-With");
  res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
  res.header("X-Powered-By",' 3.2.1')
  res.header('Access-Control-Allow-Credentials: true');

  res.header("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
  next();
});

// 解析token信息
app.use(function (req,res,next) {
  var tokenstr =req.headers['authorization'];
  if (tokenstr === undefined){
    return next();
  }
  else {
    token.verifyToken(tokenstr,'zhangdada').then((data)=>{
      console.log('解析:',data)
      req.data=data;
      return next();
    }).catch((err)=>{
      return next();
    })
  }
});

// 校验token是否过期,并且去除该地址不用校验
app.use(expressJwt({secret:'zhangdada',algorithms: ['HS256']}).unless({
  path:['/api/admin/login']
}))




接口

var token = require('../../tools/token')


router.post('/api/admin/login', function (req, res) {
// 写在你自己的逻辑中
token.createToken({gh:gh,name:result.recordset[0].name},'zhangdada',{expiresIn:'1d'}).then((data)=>{
                res.json({
                    status:'ok',
                    msg:result.recordset[0],
                    currentAuthority:'admin',
                    type: 'admin',
                    access :'admin',
                    token:data
                })
                console.log('我发送token',data);
            })

})





router.post('/api/admin/currentUser',function (req, res) {
    if (req.data){
        res.json({
            access:'',
            name:req.data.gh,
            msg:'身份验证成功'
        })
    }
    else {
        res.json({
            access:'',
            name:'未知 ',
            msg:'身份验证失效'
        })
    }






})
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值