@next-auth/xata-adapter
TypeScript icon, indicating that this package has built-in type declarations

0.2.2 • Public • Published


    

Xata Adapter - NextAuth.js

Think data, not databases.

CI Test Bundle Size @next-auth/xata-adapter Version

This adapter allows using next-auth with Xata as a database to store users, sessions, and more. The preferred way to create a Xata project and use Xata databases is using the Xata Command Line Interface (CLI). The CLI allows generating a XataClient that will help you work with Xata in a safe way, and that this adapter depends on.

Getting Started

Let's first make sure we have everything installed and configured. We're going to need:

  • next-auth + adapter
  • the Xata CLI
  • to configure the CLI

We can do this like so:

# Install next-auth + adapter
npm install next-auth @next-auth/xata-adapter

# Install the Xata CLI globally if you don't already have it
npm install --location=global @xata.io/cli

# Login
xata auth login

Now that we're ready, let's create a new Xata project using our next-auth schema that the Xata adapter can work with. To do that, copy and paste this schema file into your project's directory:

{
  "tables": [
    {
      "name": "nextauth_users",
      "columns": [
        {
          "name": "email",
          "type": "email"
        },
        {
          "name": "emailVerified",
          "type": "datetime"
        },
        {
          "name": "name",
          "type": "string"
        },
        {
          "name": "image",
          "type": "string"
        }
      ]
    },
    {
      "name": "nextauth_accounts",
      "columns": [
        {
          "name": "user",
          "type": "link",
          "link": {
            "table": "nextauth_users"
          }
        },
        {
          "name": "type",
          "type": "string"
        },
        {
          "name": "provider",
          "type": "string"
        },
        {
          "name": "providerAccountId",
          "type": "string"
        },
        {
          "name": "refresh_token",
          "type": "string"
        },
        {
          "name": "access_token",
          "type": "string"
        },
        {
          "name": "expires_at",
          "type": "int"
        },
        {
          "name": "token_type",
          "type": "string"
        },
        {
          "name": "scope",
          "type": "string"
        },
        {
          "name": "id_token",
          "type": "text"
        },
        {
          "name": "session_state",
          "type": "string"
        }
      ]
    },
    {
      "name": "nextauth_verificationTokens",
      "columns": [
        {
          "name": "identifier",
          "type": "string"
        },
        {
          "name": "token",
          "type": "string"
        },
        {
          "name": "expires",
          "type": "datetime"
        }
      ]
    },
    {
      "name": "nextauth_users_accounts",
      "columns": [
        {
          "name": "user",
          "type": "link",
          "link": {
            "table": "nextauth_users"
          }
        },
        {
          "name": "account",
          "type": "link",
          "link": {
            "table": "nextauth_accounts"
          }
        }
      ]
    },
    {
      "name": "nextauth_users_sessions",
      "columns": [
        {
          "name": "user",
          "type": "link",
          "link": {
            "table": "nextauth_users"
          }
        },
        {
          "name": "session",
          "type": "link",
          "link": {
            "table": "nextauth_sessions"
          }
        }
      ]
    },
    {
      "name": "nextauth_sessions",
      "columns": [
        {
          "name": "sessionToken",
          "type": "string"
        },
        {
          "name": "expires",
          "type": "datetime"
        },
        {
          "name": "user",
          "type": "link",
          "link": {
            "table": "nextauth_users"
          }
        }
      ]
    }
  ]
}

Now, run the following command:

xata init --schema=./path/to/your/schema.json

The CLI will walk you through a setup process where you choose a workspace (kind of like a GitHub org or a Vercel team) and an appropriate database. We recommend using a fresh database for this, as we'll augment it with tables that next-auth needs.

Once you're done, you can continue using next-auth in your project as expected, like creating a ./pages/api/auth/[...nextauth] route.

import NextAuth from "next-auth"
import GoogleProvider from "next-auth/providers/google"

const client = new XataClient()

export default NextAuth({
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    }),
  ],
})

Now to Xata-fy this route, let's add the Xata client and adapter:

import NextAuth from "next-auth"
import GoogleProvider from "next-auth/providers/google"
+import { XataAdapter } from "@next-auth/xata-adapter"
+import { XataClient } from "../../../xata" // or wherever you've chosen to create the client

+const client = new XataClient()

export default NextAuth({
+ adapter: XataAdapter(client),
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    }),
  ],
})

This fully sets up your next-auth site to work with Xata.

Contributing

This is an open-source project created by humans, and as such, might have a few issues. If you experience any of these, we recommend opening issues that can help us solve problems and build reliable software.

Dependencies (0)

    Dev Dependencies (6)

    Package Sidebar

    Install

    npm i @next-auth/xata-adapter

    Homepage

    authjs.dev

    Weekly Downloads

    194

    Version

    0.2.2

    License

    ISC

    Unpacked Size

    17.9 kB

    Total Files

    7

    Last publish

    Collaborators

    • thvu
    • ndom91
    • balazsorban
    • iaincollins