vue+koa2中使用koa-jwt

31 篇文章 4 订阅

koa2脚手架中: 

下载

cnpm i -S koa-jwt jsonwebtoken

config/settings.js:

let options_mysql = {
    host: 'localhost', //默认localhost
    user: 'root',  //mysql用户名
    password: 'root',  //mysql密码
    database: 'test'  //数据库名
}
let options_jwt = {
    jwt_key: 'jwt_key', //jwt密钥
    expiresIn: 5, //5秒后过期
    pathNoAuth: ['/login'] //无须校验的路径
}

module.exports = {
    options_mysql, options_jwt
}

db.js:

// db.js 
var mysql = require('mysql');

const { options_mysql } = require('./config/settings')

var pool = mysql.createPool({
    host: options_mysql.host,
    user: options_mysql.user,
    password: options_mysql.password,
    database: options_mysql.database
});

function query(sql) {
    return new Promise((resolve, reject) => {
        pool.getConnection(function (err, connection) {
            connection.query(sql, function (err, result) {
                if (err) {
                    reject(err)
                } else {
                    resolve(result)
                }
                connection.release();
            });
        });
    })

}

exports.query = query;

 app.js:

const koajwt = require('koa-jwt');
let { options_jwt } = require("./config/settings.js")
// 中间件对token进行验证
app.use(async (ctx, next) => {
  return next().catch((err) => {
    if (err.status === 401) {
      ctx.body = {
        code: 401,
        message: err.message
      }
    } else {
      throw err;
    }
  })
});
app.use(koajwt({ secret: options_jwt.jwt_key }).unless({
  path: options_jwt.pathNoAuth
}));

注意:上面的内容尝试使用以下的方式:

app.use(async (ctx, next) => {
  return await next().catch((err) => {
    if (err.status === 401) {
      return ctx.body = {
        code: 401,
        message: "身份验证失败"
      }
    }
    throw err;
  })
});

 routes/index.js:

const router = require('koa-router')()

const db = require("../db.js")
let jwt = require('jsonwebtoken')
let { options_jwt } = require("../config/settings.js")


router.get('/', async (ctx, next) => {
  await ctx.render('index', {
    title: 'Hello Koa 2!'
  })
})

router.get('/string', async (ctx, next) => {
  ctx.body = 'koa2 string'
})

router.get('/json', async (ctx, next) => {
  ctx.body = {
    title: 'koa2 json'
  }
})

router.post('/login', async (ctx, next) => {
  let { username, password } = ctx.request.body
  if (!username) {
    ctx.body = { code: -1, message: '用户名不能为空' }
    return
  }
  let users = await db.query(`select * from users where username='${username}'`);

  if (users.length == 0) {
    ctx.body = {
      code: -1,
      message: '该用户不存在'
    }
    return
  }
  // if (users[0].password !== md5(password)) {
  if (users[0].password !== password) {
    ctx.body = {
      code: -1,
      message: '密码错误!'
    }
    return
  }

  let token = jwt.sign({ username, id: users[0].id }, options_jwt.jwt_key, {
    expiresIn: options_jwt.expiresIn
  });

  ctx.body = {
    code: 0,
    message: '登录成功',
    token
  }
})

module.exports = router

 routes/users.js

const router = require('koa-router')()
const db = require("../db.js")

router.prefix('/users')

router.get('/', function (ctx, next) {
  ctx.body = 'this is a users response!'
})

router.get('/bar', function (ctx, next) {
  ctx.body = 'this is a users/bar response'
})

router.get('/getUserInfo', async (ctx, next) => {
  let userinfo = ctx.state.user
  let users = await db.query(`select * from users where username='${userinfo.username}'`);
  let { username, id } = users[0]
  ctx.body = {
    code: 0,
    message: "success",
    data: { username, id }
  }
})

module.exports = router

 vue2前端

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值