---
id: dev-plugins
date: '2017-07-10T23:36:56.503Z'
title: "Developing Plugins"
---

There are many ways to extend `verdaccio`, currently we only support `authentication plugins`

## Authentication Plugins

This section will describe how it looks like a Verdaccio plugin in a ES5 way. Basically we have to return an object with a single method called `authenticate` that will recieve 3 arguments (`user, password, callback`). Once the authentication has been executed there is 2 options to give a response to `verdaccio`.

##### OnError

Either something bad happened or auth was unsuccessful.

```
callback(null, false)
```

##### OnSuccess

The auth was successful.


`groups` is an array of strings where the user is part of.

```
 callback(null, groups);
```

### Example

```javascript
function Auth(config, stuff) {
  var self = Object.create(Auth.prototype);
  self._users = {};

  // config for this module
  self._config = config;

  // verdaccio logger
  self._logger = stuff.logger;

  // pass verdaccio logger to ldapauth
  self._config.client_options.log = stuff.logger;

  return self;
}

Auth.prototype.authenticate = function (user, password, callback) {
  var LdapClient = new LdapAuth(self._config.client_options);
  ....
  LdapClient.authenticate(user, password, function (err, ldapUser) {
    ...
    var groups;
     ...
    callback(null, groups);
  });
};

module.exports = Auth;
```

## Storage Plugins

// in progress

## Middleware Integration

// in progress