Express项目中: JWT使用方法

安装express-jwt

npm install express-jwt --save
npm install jsonwebtoken --save

配置jwt (app.js)

var expressJwt = require("express-jwt");
// jwt中间件
app.use(expressJwt({
  credentialsRequired: false,//关键
    secret: "yousecret"//加密密钥,可换
}).unless({
    path: ["/api/login","/api/addUser","/api/test"]//添加不需要token验证的路由 
}));

生成token

const jwt = require('jsonwebtoken')
//api/v1/login
app.post('/login', function (req, res) {
  User.findOne({userName:req.body.username,password:req.body.password}).then(result => {
      if(result){
        // 注意默认情况 Token 必须以 Bearer+空格 开头
        const token = 'Bearer ' + jwt.sign(
          {
            _id: user._id,
            admin: user.role === 'admin'
          },
          'secret12345',
          {
            expiresIn: 3600 * 24 * 3
            //or 
            //expiresIn: "10 days"
          }
        )
        res.json({
          status: 'ok',
          token: token 
        })
    } else {
      res.json({
        code: 250,
        msg: '用户名或密码不正确'
      })
    };
  })
}

vue前端路由守卫限制

// JWT 用户权限校验,判断 TOKEN 是否在 localStorage 当中
router.beforeEach(({name}, from, next) => {
  // 获取 JWT Token
  if (localStorage.getItem('token')) {
    // 如果用户在login页面
    if (name === 'login') {
      next('/');
    } else {
      next();
    }
  } else {
   router.push('/login')
  }
});

vue组件内headers携带token方法 (一)

var that=this;
            //获取课程列表
            this.axios({
                method:'get',
                url:'http://localhost:3000/api/v1/courses',
                headers:{
                    authorization:'Bearer '+window.localStorage.getItem('token')
                }
            }).then(result=>{
               
                if(result.data.length>0){
                    that.courses=result.data;
                }
            })

vue组件内headers携带token方法 (二)设置axios拦截器

每次向后端请求携带 头信息
在 src/main.js 当中加上以下代码:


// http request 拦截器可选
axios.interceptors.request.use(
  config => {
    if (localStorage.token) {  // 判断是否存在token,如果存在的话,则每个http header都加上token
      config.headers.Authorization = `Bearer ${localStorage.token}`;
    }
    return config;
  },
  err => {
    return Promise.reject(err);
  });

axios.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if (error.response.status === 401) {
     //输出授权失败错误信息
    } else {
     //输出其他错误信息
    }
    return Promise.reject(error);
  }
);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jacky张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值