Usage
Init new instance
const auth = require('@dav-nazaryan/brainstorm-task');
auth.init('admin', {
mongoUrl: 'mongodb://localhost:27017/auth-db',
}).then((authInstance) => {
// use auth instance methods
});
Usage example along with express and mongoose
const auth = require('@dav-nazaryan/brainstorm-task')
const mongoose = require('mongoose');
const express = require('express');
const app = express();
const dependencies = [
mongoose.connect('mongodb://localhost:27017/auth-demo', {
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false,
}),
auth.init('user', {
mongoUrl: 'mongodb://localhost:27017/auth-user',
}),
];
Promise.all(dependencies).then(() => {
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
});
Init instance on start and get it inside other file
server.js
const auth = require('@dav-nazaryan/brainstorm-task');
const express = require('express');
const app = express();
auth.init('user', {
mongoUrl: 'mongodb://localhost:27017/auth-db',
}).then((authInstance) => {
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
});
user.router.js
const express = require('express');
const router = express.Router();
const auth = require('@dav-nazaryan/brainstorm-task');
const userAuth = auth.get('user');
router.post('/register', async (req, res) => {
const user = await userAuth.register(req.body.login, req.body.password);
res.status(201).send(user);
});
Usage without getting an instance
server.js
const auth = require('@dav-nazaryan/brainstorm-task')
const mongoose = require('mongoose');
const express = require('express');
const app = express();
const dependencies = [
mongoose.connect('mongodb://localhost:27017/auth-demo', {
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false,
}),
// you can init multiple instances
auth.init('user', {
mongoUrl: 'mongodb://localhost:27017/auth-admin',
}),
auth.init('user', {
mongoUrl: 'mongodb://localhost:27017/auth-user',
}),
];
Promise.all(dependencies).then(() => {
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
});
admin.router.js
const express = require('express');
const router = express.Router();
const auth = require('@dav-nazaryan/brainstorm-task');
router.post('/update', async (req, res, next) => {
try {
auth.bearer('admin', req.headers.authorization);
next();
} catch (e) {
next(e);
}
});
API
Main module
-
init(id, [options]) ⇒
Promise
-
Create new auth instance and save it inside module scope
-
get(id) ⇒
Auth
-
Get instance from instances scope
- callInstanceMethod(id, method, data)
-
Call method of auth instance without getting it
- activate(id, userId)
-
Activate user in mongo for current auth instance
- deactivate(id, userId)
-
Deactivate user in mongo for current auth instance
- register(id, login, password, [options])
-
Register new user in mongo for current auth instance
- getUser(id, login, password)
-
Get user object from mongo for current auth instance
-
logIn(id, login, password) ⇒
object
-
Login registered user for current auth instance
- bearer(id, token)
-
Check user access token for current auth instance
- refresh(id, accessToken, refreshToken)
-
Check user access token for current auth instance
- logOut(id, userId, [options], login, password)
-
Cut the users sessions via removing token/all tokens for current auth instance
- update(id, userId, [login], [password])
-
Update user login or password
Auth
Promise
init(id, [options]) ⇒ Create new auth instance and save it inside module scope
Kind: global function
Param | Type | Description |
---|---|---|
id | string |
unique id of auth instance |
[options] | object |
new instance configs |
Auth
get(id) ⇒ Get instance from instances scope
Kind: global function
Returns: Auth
- - auth object instance
Param | Type | Description |
---|---|---|
id | string |
unique id of auth instance |
callInstanceMethod(id, method, data)
Call method of auth instance without getting it
Kind: global function
Param | Type | Description |
---|---|---|
id | string |
instance id |
method | string |
method to call |
data | object |
data that need to be provided ot method |
activate(id, userId)
Activate user in mongo for current auth instance
Kind: global function
Param | Type |
---|---|
id | string |
userId | string |
deactivate(id, userId)
Deactivate user in mongo for current auth instance
Kind: global function
Param | Type |
---|---|
id | string |
userId | string |
register(id, login, password, [options])
Register new user in mongo for current auth instance
Kind: global function
Param | Type | Default | Description |
---|---|---|---|
id | string |
instance id | |
login | string |
||
password | string |
||
[options] | object |
options object | |
[options.login] | boolean |
false |
log in newly created user and return his token pair, user must be activate for this option |
[options.active] | boolean |
activate newly created user | |
[options.getUser] | boolean |
false |
return new user object, options.login must be false |
getUser(id, login, password)
Get user object from mongo for current auth instance
Kind: global function
Param | Type | Description |
---|---|---|
id | string |
instance id |
login | string |
|
password | string |
object
logIn(id, login, password) ⇒ Login registered user for current auth instance
Kind: global function
Returns: object
- - access and refresh tokens pair
Param | Type | Description |
---|---|---|
id | string |
instance id |
login | string |
|
password | string |
bearer(id, token)
Check user access token for current auth instance
Kind: global function
Param | Type | Description |
---|---|---|
id | string |
instance id |
token | string |
jwt access token |
refresh(id, accessToken, refreshToken)
Check user access token for current auth instance
Kind: global function
Param | Type | Description |
---|---|---|
id | string |
instance id |
accessToken | string |
jwt access token |
refreshToken | string |
one time refresh token |
logOut(id, userId, [options], login, password)
Cut the users sessions via removing token/all tokens for current auth instance
Kind: global function
Param | Type | Default | Description |
---|---|---|---|
id | string |
instance id | |
userId | string |
user mongo objectId | |
[options] | object |
options object | |
[options.authByCredentials] | boolean |
false |
use user_id or get it via checking credentials |
[options.hard] | boolean |
false |
cut all user sessions (logout from all devices) |
[options.refreshToken] | boolean |
false |
use user_id or get it via checking credentials |
login | string |
||
password | string |
update(id, userId, [login], [password])
Update user login or password
Kind: global function
Param | Type | Description |
---|---|---|
id | string |
instance id |
userId | string |
user mongo objectId |
[login] | string |
|
[password] | string |
Auth Instance
Kind: global class
-
Auth
- new Auth([options])
- .connect(enforcer)
- .initModels(enforcer)
- .validateCredentials(login, password)
- .register(login, password, [options])
-
.getUser(login, password) ⇒
object
-
.logIn(login, password) ⇒
object
- .activate(userId)
- .deactivate(userId)
- .bearer(token)
-
.refresh(accessToken, refreshToken) ⇒
object
- .logOut(userId, [options], login, password)
- .update(userId, [login], [password])
new Auth([options])
Returns: auth
- - new auth object
Param | Type | Description |
---|---|---|
[options] | object |
options object |
[options.mongoUrl] | object |
mongo connection url |
[options.collections.user] | object |
user collection name |
[options.collections.token] | object |
token collection name |
auth.connect(enforcer)
Connect Auth object to mongo
Kind: instance method of Auth
Param | Type | Description |
---|---|---|
enforcer | symbol |
to avoid this method calling out of module |
auth.initModels(enforcer)
Add models to instance, it can be done after instance db connect
Kind: instance method of Auth
Param | Type | Description |
---|---|---|
enforcer | symbol |
to avoid this method calling out of module |
auth.validateCredentials(login, password)
Validate login and password
Kind: instance method of Auth
Param | Type |
---|---|
login | string |
password | string |
auth.register(login, password, [options])
Register new user in mongo for current auth instance
Kind: instance method of Auth
Param | Type | Default | Description |
---|---|---|---|
login | string |
||
password | string |
||
[options] | object |
options object | |
[options.login] | object |
false |
log in newly created user and return his token pair, user must be activate for this option |
[options.active] | object |
false |
activate newly created user |
[options.getUser] | object |
false |
return new user object, options.login must be false |
object
auth.getUser(login, password) ⇒ Check user auth credentials without logging him in
Kind: instance method of Auth
Returns: object
- - user object
Param | Type |
---|---|
login | string |
password | string |
object
auth.logIn(login, password) ⇒ Login registered user
Kind: instance method of Auth
Returns: object
- - access and refresh tokens pair
Param | Type |
---|---|
login | string |
password | string |
auth.activate(userId)
Activate registered user
Kind: instance method of Auth
Param | Type |
---|---|
userId | string |
auth.deactivate(userId)
Deactivate registered user
Kind: instance method of Auth
Param | Type |
---|---|
userId | string |
auth.bearer(token)
Check user access token
Kind: instance method of Auth
Param | Type | Description |
---|---|---|
token | string |
jwt access token |
object
auth.refresh(accessToken, refreshToken) ⇒ Generate new refresh and access tokens pair and update document
Kind: instance method of Auth
Returns: object
- - access and refresh tokens pair
Param | Type | Description |
---|---|---|
accessToken | string |
jwt access token |
refreshToken | string |
one time refresh token |
auth.logOut(userId, [options], login, password)
The logOut method will mostly be used by admins cut the users session, that's why I provide credentials check as an option
Kind: instance method of Auth
Param | Type | Default | Description |
---|---|---|---|
userId | string |
user mongo objectId | |
[options] | object |
options object | |
[options.authByCredentials] | boolean |
false |
use user_id or get it via checking credentials |
[options.hard] | boolean |
false |
cut all user sessions (logout from all devices) |
[options.refreshToken] | boolean |
false |
use user_id or get it via checking credentials |
login | string |
||
password | string |
auth.update(userId, [login], [password])
Update user login or password
Kind: instance method of Auth
Param | Type | Description |
---|---|---|
userId | string |
user mongo objectId |
[login] | string |
|
[password] | string |