# passport-sanity

> [Passport](http://passportjs.org/) strategy for authenticating with [Sanity](https://www.sanity.io/) using the OAuth 2.0 API.

Latest version **0.0.3** (published 2019-09-06) · MIT license · 0 weekly downloads

## Install

```sh
npm install passport-sanity
pnpm add passport-sanity
yarn add passport-sanity
bun add passport-sanity
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.3 |
| Published | 2019-09-06 |
| First published | 2019-08-12 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=6.0.0 |
| Dependencies | 1 |
| Unpacked size | 369.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | Per-Kristian Nordnes |
| Maintainers | skogsmaskin |
| Keywords | auth, authentication, identity, sanity, passport-strategy, passport, strategy |

## Links

- npm: https://www.npmjs.com/package/passport-sanity
- Repository: https://github.com/skogsmaskin/passport-sanity
- Homepage: https://github.com/skogsmaskin/passport-sanity#readme
- Issues: http://github.com/skogsmaskin/passport-sanity/issues
- npm.io page: https://npm.io/package/passport-sanity

## Dependencies (1)

- [passport-oauth2](https://npm.io/package/passport-oauth2.md) ^1.4.0

## Alternatives

- [@clerk/clerk-expo](https://npm.io/package/@clerk/clerk-expo.md) — 133.6K weekly downloads
- [@pothos/plugin-authz](https://npm.io/package/@pothos/plugin-authz.md) — 12.4K weekly downloads
- [@bounded-sh/client](https://npm.io/package/@bounded-sh/client.md) — 3.2K weekly downloads
- [@luigi-project/plugin-auth-oauth2](https://npm.io/package/@luigi-project/plugin-auth-oauth2.md) — 2.3K weekly downloads
- [@nocobase/plugin-verification](https://npm.io/package/@nocobase/plugin-verification.md) — 2.0K weekly downloads

## Recent versions

- 0.0.3 (latest) — 2019-09-06
- 0.0.2 — 2019-09-06
- 0.0.1 — 2019-08-12

## README

# passport-sanity
[Passport](http://passportjs.org/) strategy for authenticating with
[Sanity](https://www.sanity.io/) using the OAuth 2.0 API.
 
[![Build Status](https://travis-ci.com/skogsmaskin/passport-sanity.svg?branch=master)](https://travis-ci.com/skogsmaskin/passport-sanity)

This module lets you authenticate with Sanity.io in your Node.js applications.
By plugging into Passport, Sanity.io authentication can be easily and
unobtrusively integrated into any application or framework that supports
[Connect](http://www.senchalabs.org/connect/)-style middleware, including
[Express](http://expressjs.com/).


## Install

```bash
$ npm install passport-sanity
```

## Usage

#### Create an Application

Before using `passport-sanity`, you must register an application with Sanity.
Your application will be issued a client ID and client secret, which need to be provided to the strategy.
You will also need to configure a callback URL which matches the route in your application.

#### Configure Strategy

The Sanity authentication strategy authenticates users using a Sanity account
and OAuth 2.0 tokens. The client ID and secret obtained when creating an
application are supplied as options when creating the strategy. The strategy
also requires a `verify` callback, which receives the access token, as well as 
`profile` which contains the authenticated user's Netilify profile. 
The `verify` callback must call `cb` providing a user to complete authentication.

```js
const SanityStrategy = require('passport-sanity').Strategy;

passport.use(new SanityStrategy({
    clientID: SANITY_CLIENT_ID,
    clientSecret: SANITY_CLIENT_SECRET,
    callbackURL: "http://127.0.0.1:3000/auth/sanity/callback",
    state: true // use OAuth2 state param to protect against csrf attacks (requries express-session)
  },
  (accessToken, refreshToken, profile, cb) => {
    User.findOrCreate({provider: 'sanity': providerId: profile.id }, (err, user) => {
      return cb(err, user)
    })
  }
))
```

*Note: While Sanity doesn't support refresh tokens (as for Jul. 2019),
the verify callback still uses a second parameter `refreshToken` to conform
to the OAuth2 standard. This makes it easier to  share a verify callback function
for all `passport-oauth2` based authentications you use with Passport.js.
The `refreshToken` will be undefined with this strategy, and should just be ignored.*

#### Authenticate Requests

Use `passport.authenticate()`, specifying the `'sanity'` strategy, to
authenticate requests.

For example, as route middleware in an [Express](http://expressjs.com/)
application:

```js
app.get('/auth/sanity', passport.authenticate('sanity'))

app.get('/auth/sanity/callback', 
  passport.authenticate('sanity', { failureRedirect: '/login' }),
  (req, res) => {
    // Successful authentication, redirect home.
    res.redirect('/');
  })
```

---
_Source: https://npm.io/package/passport-sanity · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
