Non Polar Magnetism

    @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.

    Install

    npm i @next-auth/xata-adapter

    Homepage

    authjs.dev

    DownloadsWeekly Downloads

    162

    Version

    0.2.2

    License

    ISC

    Unpacked Size

    17.9 kB

    Total Files

    7

    Last publish

    Collaborators

    • thvu
    • ndom91
    • balazsorban
    • iaincollins