# feathers-authentication-keystone

> Keystone authentication strategy for feathers-authentication using Passport

Latest version **0.3.0** (published 2017-08-21) · MIT license · 0 weekly downloads

## Install

```sh
npm install feathers-authentication-keystone
pnpm add feathers-authentication-keystone
yarn add feathers-authentication-keystone
bun add feathers-authentication-keystone
```

## Health

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

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: insecure dependencies; abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.3.0 |
| Published | 2017-08-21 |
| First published | 2017-06-28 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >= 4.6.0 |
| Dependencies | 7 |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| Author | Alexander Kurbatov |
| Maintainers | alkurbatov |
| Keywords | feathers, feathers-plugin, feathers-authentication, openstack, keystone |

## Links

- npm: https://www.npmjs.com/package/feathers-authentication-keystone
- Repository: https://github.com/virtuozzo/feathers-authentication-keystone
- Issues: https://github.com/virtuozzo/feathers-authentication-keystone/issues
- npm.io page: https://npm.io/package/feathers-authentication-keystone

## Dependencies (7)

- [debug](https://npm.io/package/debug.md) ^2.6.8
- [lodash.omit](https://npm.io/package/lodash.omit.md) ^4.5.0
- [lodash.pick](https://npm.io/package/lodash.pick.md) ^4.4.0
- [lodash.merge](https://npm.io/package/lodash.merge.md) ^4.6.0
- [feathers-errors](https://npm.io/package/feathers-errors.md) ^2.9.1
- [openstack-wrapper](https://npm.io/package/openstack-wrapper.md) github:virtuozzo/node-openstack-wrapper
- [passport-strategy](https://npm.io/package/passport-strategy.md) ^1.0.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.3.0 (latest) — 2017-08-21
- 0.2.0 — 2017-07-22
- 0.1.0 — 2017-07-03
- 0.0.0 — 2017-06-28

## README

# feathers-authentication-keystone

[![Build Status](https://travis-ci.org/virtuozzo/feathers-authentication-keystone.png?branch=master)](https://travis-ci.org/virtuozzo/feathers-authentication-keystone)
[![Code Climate](https://codeclimate.com/github/virtuozzo/feathers-authentication-keystone/badges/gpa.svg)](https://codeclimate.com/github/virtuozzo/feathers-authentication-keystone)
[![Test Coverage](https://codeclimate.com/github/virtuozzo/feathers-authentication-keystone/badges/coverage.svg)](https://codeclimate.com/github/virtuozzo/feathers-authentication-keystone/coverage)
[![Dependency Status](https://img.shields.io/david/virtuozzo/feathers-authentication-keystone.svg?style=flat-square)](https://david-dm.org/virtuozzo/feathers-authentication-keystone)
[![Download Status](https://img.shields.io/npm/dm/feathers-authentication-keystone.svg?style=flat-square)](https://www.npmjs.com/package/feathers-authentication-keystone)

Keystone authentication strategy for feathers-authentication using Passport.

- [feathers-authentication-keystone](#feathers-authentication-keystone)
    - [Installation](#installation)
    - [Documentation](#documentation)
        - [Default Options](#default-options)
        - [Verifier](#verifier)
            - [Customizing the Verifier](#customizing-the-verifier)
        - [Complete Example](#complete-example)
    - [License](#license)

## Installation

```bash
$ npm install feathers-authentication-keystone --save
```

## Documentation

Please refer to the [feathers-authentication-keystone documentation](http://docs.feathersjs.com/) for more details.


### Default Options

```js
{
    name: 'keystone', // the name to use when invoking the authentication Strategy
    entity: 'user', // the entity that will be added to the request, socket, and hook.params. (ie. req.user, socket.user, hook.params.user)
    service: 'users', // the service to look up the entity
    passReqToCallback: true, // whether the request object should be passed to `verify`
    authUrl: 'http://<address>:<port>', // keystone endpoint with configured v3 authentication
    usernameField: 'username', // key name of username field
    passwordField: 'password', // key name of password field
    Verifier: Verifier, // A Verifier class. Defaults to the built-in one but can be a custom one. See below for details.
}
```

### Verifier

This is the verification class that receives the users identity (if verification is successful), populates the entity (normally a user) and returns both the entity and the payload. It has the following methods that can all be overridden.

```js
{
    constructor(app, options) // the class constructor
    verify(req, payload, done) // queries the configured service
}
```

#### Customizing the Verifier

The `Verifier` class can be extended so that you customize it's behavior without having to rewrite and test a totally custom local Passport implementation. Although that is always an option if you don't want use this plugin.

An example of customizing the Verifier:

```js
import keystone, { Verifier } from 'feathers-authentication-keystone';

class CustomVerifier extends Verifier {
  // The verify function has the exact same inputs and
  // return values as a vanilla passport strategy
  verify(req, payload, done) {
    // do your custom stuff. You can call internal Verifier methods
    // and reference this.app and this.options. This method must be implemented.
    done(null, payload);
  }
}

app.configure(keystone({ Verifier: CustomVerifier }));
```

### Complete Example

Here's an example of a Feathers server that uses `feathers-authentication-keystone`.

```js
const feathers = require('feathers');
const rest = require('feathers-rest');
const hooks = require('feathers-hooks');
const memory = require('feathers-memory');
const bodyParser = require('body-parser');
const errorHandler = require('feathers-errors/handler');
const auth = require('feathers-authentication');
const jwt = require('feathers-authentication-jwt');
const keystone = require('../lib/index');

// Initialize the application.
const app = feathers();

app.configure(rest())
  .configure(hooks())
  // Needed for parsing bodies (login).
  .use(bodyParser.json())
  .use(bodyParser.urlencoded({ extended: true }))
  // Configure feathers-authentication.
  .configure(auth({ secret: 'super secret' }))
  // Configure authentication by JWT token.
  .configure(jwt())
  // Keystone endpoint, this value should be taken from the config in real application.
  .configure(keystone({ authUrl: 'https://127.0.0.1:5000' }))
  .use('/users', memory())
  .use(errorHandler());

app.listen(3030);

console.log('Feathers app started on 127.0.0.1:3030');
```

## License

Copyright (c) 2017

Licensed under the [MIT license](LICENSE).

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