鉴权简介

未匹配的标注

AdonisJS 带有一个成熟的身份验证系统,可以使用 sessionsbasic authAPI tokens 对应用程序的用户进行身份验证。

@adonisjs/auth包添加了对身份验证的支持,它必须单独安装。

注:
auth 包依赖于@adonisjs/lucid包。确保首先 configure lucid

// title: Install
npm i @adonisjs/auth
// title: Configure
node ace configure @adonisjs/auth

# CREATE: app/Models/User.ts
# CREATE: database/migrations/1619578304190_users.ts
# CREATE: contracts/auth.ts
# CREATE: config/auth.ts
# CREATE: app/Middleware/Auth.ts file already exists
# CREATE: app/Middleware/SilentAuth.ts file already exists
# UPDATE: .adonisrc.json { providers += "@adonisjs/auth" }
# CREATE: ace-manifest.json file
  • 用于身份验证的多个警卫。 会话API 令牌基本身份验证
  • 可扩展的 API 添加自定义警卫和用户提供程序

 

配置

auth 包的配置存储在config/auth.ts文件中。在这个文件中,你可以定义一个或多个保护来验证用户。警卫是用户提供者和可用身份验证驱动程序之一的组合

import { AuthConfig } from '@ioc:Adonis/Addons/Auth'

const authConfig: AuthConfig = {
  guard: 'web',

  guards: {
    web: {
      driver: 'session',

      provider: {
        driver: 'lucid',
        identifierKey: 'id',
        uids: ['email'],
        model: () => import('App/Models/User'),
      },
    },
  },
}

export default authConfig

警卫

顶级guard属性定义了用于身份验证的默认保护。它必须在guards列表中定义。


guards

guards 对象是你要在应用程序中使用的 guards 的键值对, 可以使用相同或不同的驱动程序创建多个 guards。


guards.driver

用于登录和验证用户的驱动程序。你可以使用预先存在的驱动程序之一或扩展 Auth 模块以添加你自己的驱动程序。

  • session 驱动程序使用 sessions/cookies 来登录和验证请求。
  • oat 代表不透明的访问令牌,并使用无状态令牌来验证请求。
  • basic 使用基本身份验证来验证请求。

guards.provider

provider 属性配置用户提供程序以查找用户。你可以使用预先存在的提供程序之一或扩展 Auth 模块以添加自己的。

以下是可供用户查找的可用驱动程序列表。其余配置值取决于所选驱动程序。

  • lucid 使用数据模型来查找用户。
  • database 直接查询数据库以查找用户。

配置新的 guards/providers

你还可以在初始设置后配置新的 guards 和辅助程序。第一步是将它们注册到 contracts/auth.ts 文件中,以通知 TypeScript 静态编译器。

你可以在 ProvidersList 接口中添加新的提供程序。键是辅助器的名称,以及配置和实现的类型。

GuardsList 接口是你要使用的所有 guards 的列表。键是 guards 的名称,以及 guards 配置及其实现的类型。

// 文件名: contracts/auth.ts
declare module '@ioc:Adonis/Addons/Auth' {
  interface ProvidersList {
    user: {
      implementation: LucidProviderContract<typeof User>,
      config: LucidProviderConfig<typeof User>,
    },
    apps: {
      implementation: LucidProviderContract<typeof App>,
      config: LucidProviderConfig<typeof App>,
    }
  }

  interface GuardsList {
    web: {
      implementation: SessionGuardContract<'user', 'web'>,
      config: SessionGuardConfig<'user'>,
    },
    api: {
      implementation: OATGuardContract<'apps', 'api'>,
      config: OATGuardConfig<'apps'>,
    }
  }
}

一旦你在合约文件中添加了新的 guards 或辅助器,TypeScript 编译器将自动验证配置文件,强制你也为它定义配置。

迁移

设置过程还为 users 表和可选的 tokens 表创建迁移文件(如果使用带有 SQL 存储的 API 令牌保护)。

迁移的文件名使用当前时间戳,并放置在所有现有迁移之后。

你的某些表可能需要使用 users 表创建外键约束,因此 users 表迁移必须在这些迁移之前运行。

在这种情况下,可以手动重命名 users 表迁移文件,并使用较小的时间戳将其移动到其他迁移文件之前。

用法

你可以使用 ctx.auth 属性访问路由处理程序中的 auth 实例。auth 对象允许你登录用户和验证后续请求。

// 主题:登录用户
Route.post('login', async ({ auth, request }) => {
  const email = request.input('email')
  const password = request.input('password')

  await auth.use('web').attempt(email, password)
})
// 主题: 验证后续请求
Route.get('dashboard', async ({ auth }) => {
  await auth.use('web').authenticate()

  // ✅ 请求认证
  console.log(auth.user!)
})

除了基本用法之外,我们建议你阅读各个 guards 的指南,因为它们的 API 和流程可能会有所不同。

模板内引用

ctx.auth 属性也与模板共享。你可以使用它有条件地显示标记的特定部分。

@if(auth.isLoggedIn)
  <p> Hello {{ auth.user.username }} </p>
@endif

辅助器配置参考

以下是用户辅助器配置和合同的参考。

Lucid 辅助器

lucid 辅助器使用数据模型从数据库中查找用户。必须首先在合同文件中配置辅助器。

import User from 'App/Models/User'

interface ProvidersList {
  providerName: {
    implementation: LucidProviderContract<typeof User>,
    config: LucidProviderConfig<typeof User>,
  }
}

以下是所有可用配置选项的列表。

{
  provider: {
    driver: 'lucid',
    identifierKey: 'id',
    uids: ['email'],
    model: () => import('App/Models/user'),
    connection: 'pg',
    hashDriver: 'argon',
  }
}

driver

驱动程序名称必须始终设置为 lucid


identifierKey

identifierKey通 常是配置模型上的主键。身份验证包需要它来唯一标识用户。


uids

用于用户查找的模型列数组。auth.login 方法使用 uids 查找用户。

例如:如果你的应用程序允许同时使用电子邮件和用户名登录,那么必须将它们定义为 uids。此外,你需要定义模型列名而不是数据库列名。


model

用于用户查找的模型。它必须使用闭包延迟导入。

{
  model: () => import('App/Models/user'),
}

connection

用于进行 SQL 查询的数据库连接。如果未定义,将使用模型连接。


hashDriver

用于验证用户密码哈希的驱动程序。它由 auth.login 方法使用。如果未定义,我们将使用 config/hash.ts 文件中的默认哈希驱动程序。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/adonisjs/5.x/au...

译文地址:https://learnku.com/docs/adonisjs/5.x/au...

上一篇 下一篇
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~