{"id":19425443,"url":"https://github.com/fedeya/next-auth-sanity","last_synced_at":"2025-07-19T02:32:28.396Z","repository":{"id":39646238,"uuid":"361336342","full_name":"fedeya/next-auth-sanity","owner":"fedeya","description":"NextAuth Adapter and Provider for Sanity","archived":false,"fork":false,"pushed_at":"2024-11-12T15:12:59.000Z","size":479,"stargazers_count":82,"open_issues_count":6,"forks_count":20,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-05-26T09:43:18.276Z","etag":null,"topics":["next-auth","nextjs","react","sanity"],"latest_commit_sha":null,"homepage":"https://sanity.io/plugins/next-auth-sanity","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fedeya.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"Fedeya","buy_me_a_coffee":"fedeya"}},"created_at":"2021-04-25T05:09:57.000Z","updated_at":"2025-03-20T10:50:56.000Z","dependencies_parsed_at":"2024-06-19T17:11:25.250Z","dependency_job_id":"ad295c39-bba9-48b1-86c5-058a6ce144e2","html_url":"https://github.com/fedeya/next-auth-sanity","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/fedeya/next-auth-sanity","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedeya%2Fnext-auth-sanity","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedeya%2Fnext-auth-sanity/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedeya%2Fnext-auth-sanity/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedeya%2Fnext-auth-sanity/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fedeya","download_url":"https://codeload.github.com/fedeya/next-auth-sanity/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedeya%2Fnext-auth-sanity/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265876911,"owners_count":23842956,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["next-auth","nextjs","react","sanity"],"created_at":"2024-11-10T14:03:29.000Z","updated_at":"2025-07-19T02:32:28.376Z","avatar_url":"https://github.com/fedeya.png","language":"TypeScript","funding_links":["https://github.com/sponsors/Fedeya","https://buymeacoffee.com/fedeya"],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eWelcome to next-auth-sanity 👋\u003c/h1\u003e\n\u003cp\u003e\n  \u003ca href=\"https://www.npmjs.com/package/next-auth-sanity\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Version\" src=\"https://img.shields.io/npm/v/next-auth-sanity.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/next-auth-sanity\" target=\"_blank\"\u003e\n    \u003cimg alt=\"npm\" src=\"https://img.shields.io/npm/dt/next-auth-sanity\"\u003e    \n  \u003c/a\u003e\n  \u003ca href=\"#\" target=\"_blank\"\u003e\n    \u003cimg alt=\"License: MIT\" src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003e NextAuth Adapter and Provider for Sanity\n\n## Overview\n\n### Features\n\n- Saving users and account in Sanity\n- Email Provider Support\n- Retrieving of full linked provider information for a user\n- Auth with Credentials\n- Hash Credentials Passwords with Argon2\n\n### Database sessions\n\nDatabase sessions are not implemented, this adapter relies on usage of JSON Web Tokens for stateless session management.\n\n### Privacy and user information\n\nStoring people's user credentials is always a big responsibility. Make sure you understand the risks and inform your users accordingly. This adapter store the user information with [the `_id` on the `user.` path](https://www.sanity.io/docs/ids#fdc25ada5db2). In other words, these documents can't be queried without authentication, even if your dataset is set to be public. That also means that these documents are available for everyone that's part of your Sanity project.\n\n## Requirements\n\n- Sanity Token for Read+Write\n\n## Installation\n\n### yarn\n\n```sh\nyarn add next-auth-sanity\n```\n\n### npm\n\n```sh\nnpm i next-auth-sanity\n```\n\n## Usage\n\n[Full Example](https://github.com/Fedeya/next-auth-sanity/tree/main/examples/full-example)\n\n```ts\nimport NextAuth, { NextAuthOptions } from 'next-auth';\nimport GitHub from 'next-auth/providers/github';\nimport { NextApiRequest, NextApiResponse } from 'next';\nimport { SanityAdapter, SanityCredentials } from 'next-auth-sanity';\nimport { client } from 'your/sanity/client';\n\nconst options: NextAuthOptions = {\n  providers: [\n    GitHub({\n      clientId: process.env.GITHUB_CLIENT_ID,\n      clientSecret: process.env.GITHUB_CLIENT_SECRET\n    }),\n    SanityCredentials(client) // only if you use sign in with credentials\n  ],\n  session: {\n    strategy: 'jwt'\n  },\n  adapter: SanityAdapter(client)\n};\n\nexport default NextAuth(options);\n```\n\n### Sanity Schemas\n\nyou can install this package in your studio project and use the schemas like this\n\n```ts\nimport createSchema from 'part:@sanity/base/schema-creator';\n\nimport schemaTypes from 'all:part:@sanity/base/schema-type';\nimport { user, account, verificationToken } from 'next-auth-sanity/schemas';\n\nexport default createSchema({\n  name: 'default',\n  types: schemaTypes.concat([user, account, verificationToken])\n});\n```\n\n\u003cdetails\u003e\n  \u003csummary\u003eOr copy paste the schemas\u003c/summary\u003e\n  \n  ```ts\n  // user - required\n  \n  export default {\n    name: 'user',\n    title: 'User',\n    type: 'document',\n    fields: [\n      {\n        name: 'name',\n        title: 'Name',\n        type: 'string'\n      },\n      {\n        name: 'email',\n        title: 'Email',\n        type: 'string'\n      },\n      {\n        name: 'image',\n        title: 'Image',\n        type: 'url'\n      },\n      {\n        // this is only if you use credentials provider\n        name: 'password',\n        type: 'string',\n        hidden: true\n      },\n      {\n        name: 'emailVerified',\n        type: 'datetime',\n        hidden: true,\n      }\n    ]\n  };\n  ```\n  \n  ```ts\n  // account - required\n  \n  export default {\n    name: 'account',\n    title: 'Account',\n    type: 'document',\n    fields: [\n      {\n        name: 'providerType',\n        type: 'string'\n      },\n      {\n        name: 'providerId',\n        type: 'string'\n      },\n      {\n        name: 'providerAccountId',\n        type: 'string'\n      },\n      {\n        name: 'refreshToken',\n        type: 'string'\n      },\n      {\n        name: 'accessToken',\n        type: 'string'\n      },\n      {\n        name: 'accessTokenExpires',\n        type: 'number'\n      },\n      {\n        name: 'user',\n        title: 'User',\n        type: 'reference',\n        to: { type: 'user' }\n      }\n    ]\n  };\n  ```\n  \n  ```ts\n  // verification-token - only if you use email provider\n  \n  export default {\n    name: 'verification-token',\n    title: 'Verification Token',\n    type: 'document',\n    fields: [\n      {\n        name: 'identifier',\n        title: 'Identifier',\n        type: 'string'\n      },\n      {\n        name: 'token',\n        title: 'Token',\n        type: 'string'\n      },\n      {\n        name: 'expires',\n        title: 'Expires',\n        type: 'datetime'\n      }\n    ]\n  };\n  ```\n\u003c/details\u003e\n\n### Sign Up and Sign In With Credentials\n\n### Setup\n\n`API Route` (with pages)\n\n```ts\n// pages/api/sanity/signUp.ts\nimport { signUpHandler } from 'next-auth-sanity';\nimport { client } from 'your/sanity/client';\n\nexport default signUpHandler(client);\n```\n\n`Route Handler` (with app directory)\n  \n```ts\n// app/api/sanity/signUp/route.ts\nimport { signUpHandler } from 'next-auth-sanity';\nimport { client } from 'your/sanity/client';\n\nexport const POST = signUpHandler(client);\n```\n\n`Client`\n\n```ts\nimport { signUp } from 'next-auth-sanity/client';\nimport { signIn } from 'next-auth/react';\n\nconst user = await signUp({\n  email,\n  password,\n  name\n});\n\nawait signIn('sanity-login', {\n  redirect: false,\n  email,\n  password\n});\n```\n\n## Custom Schemas\nif you want to use another schema or upgrade from previous version you can change the default schema used in the library, to do so you can pass a second argument to all methods with config\n```ts\nSanityAdapter(client, {\n  schemas: {\n    verificationToken: 'verification-request',\n    account: 'account',\n    user: 'profile'\n  }\n})\n\n\n// the second argument is the name of the user schema\n// default: 'user'\n\nSanityCredentials(client, 'profile');\n\nsignUpHandler(client, 'profile');\n```\n\n## Author\n\n👤 **Fedeya \u003chello@fedeminaya.com\u003e**\n\n- Website: [fedeminaya.com](https://fedeminaya.com)\n- Twitter: [@fedeminaya](https://twitter.com/fedeminaya)\n- Github: [@Fedeya](https://github.com/Fedeya)\n- LinkedIn: [@federico-minaya](https://linkedin.com/in/federico-minaya)\n\n## 🤝 Contributing\n\nContributions, issues and feature requests are welcome!\u003cbr /\u003eFeel free to check [issues page](https://github.com/Fedeya/next-auth-sanity/issues).\n\n## Show your support\n\nGive a ⭐️ if this project helped you!\n\n---\n\n_This README was generated with ❤️ by [readme-md-generator](https://github.com/kefranabg/readme-md-generator)_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffedeya%2Fnext-auth-sanity","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffedeya%2Fnext-auth-sanity","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffedeya%2Fnext-auth-sanity/lists"}