5-1 修改app.js

image.png
src/app.ts

  1. import Koa from 'koa'
  2. import cors from '@koa/cors'
  3. import logger from 'koa-logger'
  4. import bodyparser from 'koa-bodyparser'
  5. import jwt from 'koa-jwt'
  6. // routes
  7. import authRoutes from './routes/auth'
  8. import { jwtSecret } from './config/auth'
  9. // koa应用实例
  10. const app = new Koa()
  11. // middlewares
  12. app.use(cors()) // 支持跨域
  13. app.use(bodyparser({ // 解析请求体
  14. enableTypes: ['json', 'form', 'text']
  15. }))
  16. app.use(logger()) // 开发日志中间件
  17. // 自定义401错误
  18. app.use((ctx, next) => {
  19. return next().catch(err => {
  20. if (err.status === 401) {
  21. ctx.status = 401
  22. ctx.body = {
  23. code: 401,
  24. error: '未登录 token失效'
  25. }
  26. } else {
  27. ctx.throw(err)
  28. }
  29. })
  30. })
  31. // token验证 header未携带token 直接返回401 Authentication Error
  32. app.use(jwt(({ secret: jwtSecret })).unless({
  33. // 白名单
  34. path: ['/api/auth/login', '/api/auth/register']
  35. }))
  36. // routes
  37. // 用户验证路由(登录 注册)
  38. app.use(authRoutes.routes()).use(authRoutes.allowedMethods())
  39. // listen
  40. const port = process.env.PORT || '3003'
  41. app.listen(port, () => {
  42. console.log(`server listening on ${port}`)
  43. })
  44. app.on('error', (err) =>
  45. console.error('server error', err)
  46. )

5-2 测试

如果接口未携带token,并且不再白名单 会报401错误

添加一个测试接口
src/routes/auth.ts
image.png
测试结果
image.png
image.png

携带token

找一个登录接口返回的token
image.png

成功响应
image.png

本节参考源码

https://gitee.com/brolly/vue3-admin-server/commit/867c6269b6a571d2264a484fb080aaceea4c9737