在Egg.js中使用中间件实现用户登录验证

在Egg.js中使用中间件实现用户登录验证

在本篇博客中,我们将探讨如何在Egg.js框架中通过中间件实现token验证,以确保用户的合法身份。这一技术在需要安全访问的API接口中尤为重要。

1. 在 service/user.js 中添加验证token函数

首先,我们在 service/user.js 文件中创建一个函数来验证token。这个函数使用了 jsonwebtoken 库来解析和验证token。

js 复制代码
const Service = require('egg').Service
const jwt = require('jsonwebtoken')

class UserService extends Service {
  verifyToken(token) {
    return jwt.verify(token, this.app.config.jwt.secret)
  }
}

2. 新建 middleware/auth.js

接下来,我们在 middleware 目录下新建一个 auth.js 文件。这个中间件将负责提取请求头中的token,并调用之前创建的验证函数进行验证。

js 复制代码
module.exports = (options = { required: true }) => {
  return async (ctx, next) => {
    let token = ctx.headers.authorization
    token = token ? token.split('Bearer ')[1] : null
    if (token) {
      try {
        const data = ctx.service.user.verifyToken(token)
        ctx.user = data.user
      } catch (error) {
        ctx.throw(401, 'token验证失败')
      }
    } else if (!options.required) {
      await next()
    } else {
      ctx.throw(401, 'token未传入')
    }
    await next()
  }
}

3. 新建路由进行验证

最后,我们在路由文件中配置路由,使其在访问某些特定接口时,先通过token验证中间件。

js 复制代码
module.exports = app => {
  const { router, controller } = app;
  // 添加前缀
  router.prefix('/api/v1')
  // 用户频道
  router.post('/users/info', app.middleware.auth(), controller.user.userInfo)
};

总结

通过以上步骤,我们成功地在Egg.js项目中实现了一个基于中间件的token验证机制。此实现方法确保了只有携带有效token的请求才能访问特定的API接口,从而提高了系统的安全性。

总之,使用中间件进行token验证是保护API接口的一种有效方式。这种方法不仅使代码更加简洁明了,还能确保系统的安全性和稳定性。

相关推荐
SelectDB10 分钟前
Apache Doris / SelectDB 实时分析三大范式:技术能力、选型对比与企业实践
后端
SelectDB18 分钟前
Apache Doris 向量化执行与 CPU 性能优化:技术能力、选型对比与实践
后端
CoderLiu23 分钟前
Agent 工程的下一层:为什么「把流程写成图」还不够,还需要 Graph Engineering
前端·人工智能·后端
Conan在掘金25 分钟前
ArkTS 进阶之道(9):@Provide/@Consume 跨层传值——为啥不叫全局变量
后端
AskHarries32 分钟前
错误监控怎么做
后端
MacroZheng35 分钟前
同事:“Claude Code都能自动写代码了,还要什么Spec Coding?” 我反问:“屎山代码你来维护?”
java·人工智能·后端
爱勇宝36 分钟前
《道德经》第 8 章:真正高级的能力,像水一样成事
前端·后端·程序员
Zane199441 分钟前
可变对象 vs 不可变对象:为什么"可变默认参数"是 Python 最经典的坑?
后端·python
未秃头的程序猿41 分钟前
JDK 26的Value Class,我做了个性能测试,结果出乎意料
java·后端·面试
swipe42 分钟前
10|(前端转全栈)库存扣减为什么最容易出事故?SKU、并发与原子更新
前端·后端·全栈