Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/laardee/api-token


https://github.com/laardee/api-token

Last synced: 3 days ago
JSON representation

Awesome Lists containing this project

README

        

api-token
=========

Simple module for Node.js that can be used e.g. for REST api session management.

## Installation

```
npm install api-token --save
```

## Usage

### Node.js server

**setup api-token**

```javascript
var apiToken = require('api-token');
/* set expiration time to 2 minutes */
apiToken.setExpirationTime(2);
```

**expressjs**

Example how to use api-token module in Express application. For more details see [Example project](#example-project).

```javascript
app.all('/api/*', function(req, res, next){
if(req.url === '/api/authenticate'){
/* token is not needed when authenticating */
next();
}else if(apiToken.isTokenValid(req.get('API-Token'))){
/* if token is valid continue */
next();
}else{
/* if token is not valid send unauthorized http statuscode to client */
res.send(401);
}
});
```

```javascript
app.post('/api/authenticate', function(req, res){
var authenticated = false;
/* do your authentication tricks */
if(!authenticated){
res.send(401);
}else{
var user = apiToken.addUser(req.body.username);
/* send token back to client */
res.send(200,{'token':user.token});
}
});
```

**plain http server**

Example how to use api-token with http server.

```javascript
http.createServer(function (req, res) {
/* if requesting API */
if((req.url.indexOf('/api')>-1)){
/* if authenticating */
if(req.url.indexOf('/api/authenticate')>-1){
if (req.method == 'POST') {
var payload = "";
req.on('data', function(chunk) {
payload= chunk.toString();
});
req.on('end', function() {
var json = JSON.parse(payload);
var authenticated = false;
/* do your authentication tricks */
if(!authenticated){
res.writeHead(401, "Unauthorized", {'Content-Type': 'text/plain'});
res.end();
}else{
var user = apiToken.addUser(json.username);
res.writeHead(200, "OK", {'Content-Type': 'application/json'});
/* send token back to client */
res.end(JSON.stringify({'token':user.token}));
}
});
}
}else{
if(apiToken.isTokenValid(req.headers['api-token'])){
/* if token is valid continue */
res.writeHead(200, "OK", {'Content-Type': 'application/json'});
res.end(JSON.stringify({'message':'Here is the data you requested, sir.'}));
}else{
/* if token is not valid send unauthorized http statuscode to client */
res.writeHead(401, "Unauthorized", {'Content-Type': 'text/plain'});
res.end();
}
}
}else{
/* not api request */
res.writeHead(200, "OK", {'Content-Type': 'application/json'});
res.end();
}
}).listen(1337, '127.0.0.1');
```

### Example project

Example application which demonstrates the use of the module.
https://github.com/laardee/api-token-expressjs-demo

## Release History

* 0.1.2 Added generated id and toPublic method to User
* 0.1.1 Minor changes in package.json
* 0.1.0 Initial release