跳至內容
正在從 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 在工作階段和驗證請求過期後自動刪除,您應該使用屬性名稱 expires 啟用 TTL。您可以設定任何您想要的資料表名稱和計費方式。您可以在下方的資料表結構章節中找到完整的結構描述。

使用自訂結構描述

您可以將 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