You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AdonisJS 5中为API接口添加Bearer Token授权验证?

AdonisJS 5 实现 Bearer Token 接口授权校验方案

AdonisJS 5 原生自带完整的 Bearer Token 授权校验能力,无需额外引入第三方依赖即可落地,具体实现步骤如下:

1. 初始化官方认证模块

首先在项目根目录执行命令,配置官方Auth模块:
node ace configure @adonisjs/auth
执行命令时按照交互提示选择对应配置:

  • 认证守卫类型选择 API tokens
  • 关联用户模型选择项目中使用的用户模型(默认选User模型即可)
  • Token存储方式:本地开发可选内存存储,生产环境必须选数据库存储

命令执行完成后,会自动生成以下文件/配置:

  • config/auth.ts 认证模块配置文件,默认守卫已设置为api token模式
  • User模型自动追加token关联关系
  • 生成api_tokens表的数据库迁移文件(选数据库存储时生成)

如果选择了数据库存储token,执行迁移命令生成token存储表:
node ace migration:run
生成的api_tokens表会自动记录token值、关联用户ID、过期时间、吊销状态等信息。

2. 实现登录签发Token逻辑

在用户登录接口中,账号密码校验通过后,调用auth模块内置方法签发有效token即可,示例代码:

// app/Controllers/Http/AuthController.ts
import Hash from '@ioc:Adonis/Core/Hash'
import User from 'App/Models/User'

export default class AuthController {
  public async login({ request, auth, response }) {
    const { email, password } = request.only(['email', 'password'])
    // 查询用户并校验密码
    const user = await User.findBy('email', email)
    if (!user || !(await Hash.verify(user.password, password))) {
      return response.status(401).send({ message: '账号或密码错误' })
    }
    // 签发有效期7天的Bearer Token
    const tokenResult = await auth.use('api').generate(user, {
      expiresIn: '7 days'
    })
    // 返回给前端的token值,前端请求时拼接在Bearer 后即可
    return {
      userInfo: { id: user.id, email: user.email },
      accessToken: tokenResult.token
    }
  }
}

3. 给需要授权的接口挂载校验中间件

Auth模块配置完成后会自动注册全局可用的auth中间件,直接在路由上挂载即可开启Bearer Token校验,支持两种挂载方式:

  • 单个路由挂载:
// start/routes.ts
import Route from '@ioc:Adonis/Core/Route'

// 该接口必须携带有效Bearer Token才能访问
Route.get('user/profile', 'UserController.getProfile').middleware('auth')
  • 路由组批量挂载:
// start/routes.ts
Route.group(() => {
  Route.get('user/profile', 'UserController.getProfile')
  Route.put('user/info', 'UserController.updateInfo')
  Route.post('upload', 'FileController.upload')
  // 组内所有接口统一开启Bearer Token校验
}).middleware('auth')

挂载auth中间件的接口,会自动解析请求头中的Authorization字段,校验Bearer 前缀后的token是否存在、是否有效、是否过期,校验不通过会直接返回401未授权响应;校验通过后,控制器中可直接通过ctx.auth.user获取当前登录用户信息,无需额外查询。

4. 自定义扩展场景(可选)

如果需要对接外部签发的Bearer Token(比如统一身份平台签发的JWT),不需要使用Adonis自带的token签发能力,可以自定义认证守卫:

  • 在contracts/auth.ts中声明自定义守卫的类型
  • 新建守卫类实现框架要求的GuardContract接口,重写authenticate方法,自行实现从请求头提取token、验签、查询对应用户的逻辑
  • 在config/auth.ts中将默认守卫替换为自定义守卫即可,路由上的auth中间件无需修改。

内容的提问来源于stack exchange,提问作者Lehan Musthafa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:01:46