next-auth-couchbase-adapter
Version:
Couchbase adapter for next-auth.
112 lines (84 loc) • 3.6 kB
Markdown
<p align="center">
<br/>
<a href="https://next-auth.js.org" target="_blank"><img height="64px" src="https://next-auth.js.org/img/logo/logo-sm.png" /></a> <img height="64px" src="https://www.couchbase.com/webfiles/1636734595522/images/couchbase_logo_black.svg" />
<h3 align="center"><b>Couchbase Adapter</b> - NextAuth.js</h3>
</p>
This is the Couchbase Adapter for [`next-auth`](https://next-auth.js.org). This package can only be used in conjunction with the primary `next-auth` package. It is not a standalone package.
This adapter uses Ottoman ODM to connect `next-auth` to Couchbase.
1. Install `next-auth@4.0.0-beta.6` and `next-auth-couchbase-adapter`, as well as `ottoman`. (Ottoman depends on Couchbase Node SDK, which is included as a dep in ottoman, so no need to install couchbase)
```
npm install next-auth@4.0.0-beta.6 next-auth-couchbase-adapter ottoman
```
2. Add this adapter to your `pages/api/[...nextauth].ts` next-auth configuration object.
```js
import NextAuth, { Profile } from "next-auth";
import { OAuthConfig } from "next-auth/providers";
import Google from "next-auth/providers/google";
import CouchbaseAdapter, { adapterOptions } from "next-auth-couchbase-adapter";
const options: adapterOptions = {
connectionString: "couchbase://localhost",
bucketName: "connext",
username: "Administrator",
password: "1234567890",
// ensure collections and indexes for quick setup in development (DON'T DO THIS IN PRODUCTION)
ensureCollections: true,
ensureIndexes: true,
};
export default NextAuth({
// Configure one or more authentication providers
providers: [
Google({
clientId: process.env.GOOGLE_ID as string,
clientSecret: process.env.GOOGLE_SECRET as string,
}) as OAuthConfig<Profile>,
],
jwt: {
secret: process.env.SECRET as string,
},
adapter: CouchbaseAdapter(options),
// ...
})
```
In the options objection you can add a `collectionNames` property to name the next-auth collections (models) whatever you would like:
```js
const options: adapterOptions = {
connectionString: "couchbase://localhost",
// ...
collectionNames: {
User: "WhateverUser", // default is User
Account: "WhateverAccount", // default is UserAccount
Session: "WhateverSession", // default is UserSession
VerificationToken: "WhateverToken", // default is UserVerificationToken
},
}
```
You can use your own ottoman instance if you already have a module setup that you would like to reuse, just need a reference to the Ottoman instance and make sure you export your connection settings so the couchbase adapter can connect if needed.
```js
// somewhere.ts <--- your module file
const ottoman = new Ottoman()
const connectionOptions = {
connectionString: "couchbase://localhost",
bucketName: "connext",
username: "Administrator",
password: "1234567890",
}
export { connectionOptions }
export default ottoman
```
and then in the nextauth route:
```js
// [...nextauth].ts file
import yourOttomanInstance, { connectionOptions } from "somewhere"
const options: adapterOptions = {
instance: yourOttomanInstance,
...connectionOptions,
}
```
We're open to all community contributions! If you'd like to contribute in any way, please read our [Contributing Guide](https://github.com/nextauthjs/adapters/blob/main/CONTRIBUTING.md).
ISC