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 服務/資源的存取權時,請務必遵循最小權限原則 -> 應該只允許身分執行完成特定任務所需的最少動作集。
- 開啟 AWS 主控台並前往「IAM」,然後前往「使用者」。
- 建立新使用者。此使用者的目的是提供對 DynamoDB 的程式化存取。
- 建立存取金鑰,然後將金鑰 ID 和密碼複製到您的
.env
/.env.local
檔案。 - 選取「新增權限」和「建立內嵌政策」。
- 將下方的 JSON 複製到 JSON 輸入中,並將
region
、account_id
和table_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。
預設結構描述
資料表遵循單一資料表設計模式。這有許多優點
- 只有一個資料表需要管理、監控和佈建。
- 查詢關聯比使用多資料表結構描述更快(例如,擷取使用者的所有工作階段)。
- 如果您想要進行多區域設定,則只需要複製一個資料表。
依預設,轉接器預期一個具有分割區索引鍵 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",
})