SurrealDB 適配器
資源
設定
安裝
npm install @auth/surrealdb-adapter surrealdb.js
環境變數
AUTH_SURREALDB_CONNECTION
AUTH_SURREALDB_USERNAME
AUTH_SURREALDB_PASSWORD
AUTH_SURREALDB_NS
AUTH_SURREALDB_DB
組態
./auth.ts
import NextAuth from "next-auth"
import { SurrealDBAdapter } from "@auth/surrealdb-adapter"
import clientPromise from "./lib/surrealdb"
export const { handlers, auth, signIn, signOut } = NextAuth({
providers: [],
adapter: SurrealDBAdapter(clientPromise),
})
SurrealDB 適配器不會自動處理連線,因此您必須確保將已連線的 SurrealDBClient
傳遞給適配器。您可以在下方看到如何執行此操作的範例。
授權
選項 1 – 使用 RPC:
./lib/surrealdb.ts
import { Surreal } from "surrealdb.js"
const connectionString = process.env.AUTH_SURREALDB_CONNECTION
const username = process.env.AUTH_SURREALDB_USERNAME
const password = process.env.AUTH_SURREALDB_PASSWORD
const namespace = process.env.AUTH_SURREALDB_NAMESPACE
const database = process.env.AUTH_SURREALDB_DATABASE
if (!connectionString || !username || !password || !namespace || !database) {
throw new Error(
"SurrealDB connection string, username, password, namespace, and database are required"
)
}
const clientPromise = new Promise<Surreal>(async (resolve, reject) => {
const db = new Surreal()
try {
await db.connect(`${connectionString}/rpc`, {
namespace,
database,
auth: {
username,
password,
},
})
resolve(db)
} catch (e) {
reject(e)
}
})
// Export a module-scoped Promise<Surreal>. By doing this in a
// separate module, the client can be shared across functions.
export default clientPromise
選項 2 – 使用 HTTP:
在像 Vercel 這樣的無伺服器環境中很有用。
./lib/surrealdb.ts
import { ExperimentalSurrealHTTP } from "surrealdb.js"
const connectionString = process.env.AUTH_SURREALDB_CONNECTION
const username = process.env.AUTH_SURREALDB_USERNAME
const password = process.env.AUTH_SURREALDB_PASSWORD
const namespace = process.env.AUTH_SURREALDB_NAMESPACE
const database = process.env.AUTH_SURREALDB_DATABASE
if (!connectionString || !username || !password || !namespace || !database) {
throw new Error(
"SurrealDB connection string, username, password, namespace, and database are required"
)
}
const clientPromise = new Promise<ExperimentalSurrealHTTP<typeof fetch>>(
async (resolve, reject) => {
try {
const db = new ExperimentalSurrealHTTP(connectionString, {
fetch,
namespace,
database,
auth: {
username,
password,
},
})
resolve(db)
} catch (e) {
reject(e)
}
}
)
// Export a module-scoped Promise<Surreal>. By doing this in a
// separate module, the client can be shared across functions.
export default clientPromise