Skip to main content
Version: v4


This is the Fauna Adapter for next-auth. This package can only be used in conjunction with the primary next-auth package. It is not a standalone package.

You can find the Fauna schema and seed information in the docs at

Getting Started#


When using the NextAuth v4 beta, please make sure to use the next tagged version of your adapter. For more info on adapter changes, see the migration docs

  1. Install the necessary packages
npm install next-auth@beta @next-auth/fauna-adapter faunadb
  1. Add this adapter to your pages/api/[...nextauth].js next-auth configuration object.
import NextAuth from "next-auth"import GoogleProvider from "next-auth/providers/google"import * as Fauna from "faunadb"import { FaunaAdapter } from "@next-auth/fauna-adapter"
const client = new Fauna.Client({  secret: "secret",  scheme: "http",  domain: "localhost",  port: 8443,})
// For more information on each option (and a full list of options) go to// default NextAuth({  //  providers: [    GoogleProvider({      clientId: process.env.GOOGLE_ID,      clientSecret: process.env.GOOGLE_SECRET,    }),  ],  adapter: FaunaAdapter({ faunaClient: client})  ...})


Run the following commands inside of the Shell tab in the Fauna dashboard to setup the appropriate collections and indexes.

CreateCollection({ name: "accounts" })CreateCollection({ name: "sessions" })CreateCollection({ name: "users" })CreateCollection({ name: "verification_requests" })CreateIndex({  name: "account_by_provider_account_id",  source: Collection("accounts"),  unique: true,  terms: [    { field: ["data", "providerId"] },    { field: ["data", "providerAccountId"] },  ],})CreateIndex({  name: "session_by_token",  source: Collection("sessions"),  unique: true,  terms: [{ field: ["data", "sessionToken"] }],})CreateIndex({  name: "user_by_email",  source: Collection("users"),  unique: true,  terms: [{ field: ["data", "email"] }],})CreateIndex({  name: "verification_request_by_token_and_identifier",  source: Collection("verification_requests"),  unique: true,  terms: [{ field: ["data", "token"] }, { field: ["data", "identifier"] }],})