跳至内容
从 NextAuth.js v4 迁移?阅读 我们的迁移指南.

DynamoDB 适配器

资源

设置

安装

npm install @auth/dynamodb-adapter @aws-sdk/lib-dynamodb @aws-sdk/client-dynamodb

环境变量

AUTH_DYNAMODB_ID=accessKey
AUTH_DYNAMODB_SECRET=secretKey
AUTH_DYNAMODB_REGION=eu-west-1

配置

您需要从模块化 aws-sdk v3 将 DynamoDBDocument 客户端传递给适配器。默认表名为 next-auth,但您可以通过将 { tableName: 'your-table-name' } 作为适配器中的第二个参数来自定义。

./auth.ts
import NextAuth from "next-auth"
import { DynamoDB, DynamoDBClientConfig } from "@aws-sdk/client-dynamodb"
import { DynamoDBDocument } from "@aws-sdk/lib-dynamodb"
import { DynamoDBAdapter } from "@auth/dynamodb-adapter"
 
const config: DynamoDBClientConfig = {
  credentials: {
    accessKeyId: process.env.AUTH_DYNAMODB_ID,
    secretAccessKey: process.env.AUTH_DYNAMODB_SECRET,
  },
  region: process.env.AUTH_DYNAMODB_REGION,
}
 
const client = DynamoDBDocument.from(new DynamoDB(config), {
  marshallOptions: {
    convertEmptyValues: true,
    removeUndefinedValues: true,
    convertClassInstanceToMap: true,
  },
})
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  providers: []
  adapter: DynamoDBAdapter(client),
})

AWS 凭据

在授予对 AWS 服务/资源的访问权限时,始终遵循**最小权限原则** -> 身份应只被允许执行完成特定任务所需的最小子集操作。

  1. 打开 AWS 控制台 并转到“IAM”,然后转到“用户”。
  2. 创建一个新用户。此用户的目的是提供对 DynamoDB 的编程访问权限。
  3. 创建访问密钥,然后将密钥 ID 和密钥复制到您的 .env/.env.local 文件中。
  4. 选择“添加权限”和“创建内联策略”。
  5. 将下面的 JSON 复制到 JSON 输入中,并用您的值替换 regionaccount_idtable_name
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DynamoDBAccess",
      "Effect": "Allow",
      "Action": [
        "dynamodb:BatchGetItem",
        "dynamodb:BatchWriteItem",
        "dynamodb:Describe*",
        "dynamodb:List*",
        "dynamodb:PutItem",
        "dynamodb:DeleteItem",
        "dynamodb:GetItem",
        "dynamodb:Scan",
        "dynamodb:Query",
        "dynamodb:UpdateItem"
      ],
      "Resource": [
        "arn:aws:dynamodb:{region}:{account_id}:table/{table_name}",
        "arn:aws:dynamodb:{region}:{account_id}:table/{table_name}/index/GSI1"
      ]
    }
  ]
}

高级用法

IaC 模板

以下是一些流行提供商的 基础设施即代码模板,可帮助您启动 DynamoDB。

默认架构

该表遵循单表设计模式。这有许多优势

  • 只需管理、监控和配置一个表。
  • 查询关系比多表架构快(例如,检索某个用户的全部会话)。
  • 如果要进行多区域操作,则只需复制一个表。

DynamoDB Table

默认情况下,适配器期望一个表具有一个分区键 pk 和一个排序键 sk,以及一个名为 GSI1 的全局二级索引,GSI1PK 作为分区键,GSI1SK 作为排序键。要使用 dynamodb TTL 自动删除会话和验证请求(在它们过期后),您应该 启用 TTL,其属性名为 expires。您可以将任何您想要的内容设置为表名和计费方式。您可以在下面的表结构部分找到完整的架构。

使用自定义架构

您可以通过将 options 键传递给适配器构造函数来配置您的自定义表架构

./auth.js
const adapter = DynamoDBAdapter(client, {
  tableName: "custom-table-name",
  partitionKey: "custom-pk",
  sortKey: "custom-sk",
  indexName: "custom-index-name",
  indexPartitionKey: "custom-index-pk",
  indexSortKey: "custom-index-sk",
})
Auth.js © Balázs Orbán 和团队 -2024