https://github.com/senecajs/seneca-user
User account business logic (Seneca microservice component)
https://github.com/senecajs/seneca-user
business-logic component microservices seneca user
Last synced: 7 months ago
JSON representation
User account business logic (Seneca microservice component)
- Host: GitHub
- URL: https://github.com/senecajs/seneca-user
- Owner: senecajs
- License: mit
- Created: 2012-09-17T10:47:08.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2024-06-10T19:30:56.000Z (over 1 year ago)
- Last Synced: 2025-06-21T04:16:23.951Z (7 months ago)
- Topics: business-logic, component, microservices, seneca, user
- Language: JavaScript
- Homepage: https://senecajs.org
- Size: 1.53 MB
- Stars: 21
- Watchers: 12
- Forks: 30
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README

> A [Seneca.js][] user management plugin.
# @seneca/user
[![npm version][npm-badge]][npm-url]
[](https://github.com/senecajs/seneca-user/actions/workflows/build.yml)
[![Coverage Status][coveralls-badge]][coveralls-url]
[![Maintainability][codeclimate-badge]][codeclimate-url]
|  | This open source module is sponsored and supported by [Voxgig](https://www.voxgig.com). |
|---|---|
## Description
This module is a plugin for
the [Seneca framework](http://senecajs.org). It provides a set of
common user management actions (`register`, `login` etc.).
## Install
```sh
npm install seneca
npm install seneca-promisify // dependency
npm install seneca-entity // dependency
npm install @seneca/user
```
### Quick example
Register a user and then create an automatic login for testing.
```js
const Seneca = require('seneca')
var seneca = Seneca()
.use('promisify')
.use('entity')
.use('user')
var out = await seneca.post('sys:user,register:user', {
handle: 'alice'
})
console.log('USER:', out.user)
out = await seneca.post('sys:user,login:user', {
handle: 'alice',
auto: true
})
console.log('LOGIN:', out.login)
```
### Detailed Examples
Because Seneca treats messages as first-class citizens, 90% of unit
testing can be implemented with message scenarios that also provide
detailed usage examples:
* [register_get](test/register_get.calls.js)
* [password](test/password.calls.js)
* [adjust](test/adjust.calls.js)
* [verify](test/verify.calls.js)
* [login](test/login.calls.js)
* [logout](test/logout.calls.js)
* [change](test/change.calls.js)
* [final](test/final.calls.js)
## Action Patterns
* [adjust:user,sys:user](#-adjustusersysuser-)
* [auth:user,sys:user](#-authusersysuser-)
* [change:pass,sys:user](#-changepasssysuser-)
* [change:handle,sys:user](#-changehandlesysuser-)
* [change:email,sys:user](#-changeemailsysuser-)
* [change:password,sys:user](#-changepasswordsysuser-)
* [check:verify,sys:user](#-checkverifysysuser-)
* [check:exists,sys:user](#-checkexistssysuser-)
* [cmd:encrypt,hook:password,sys:user](#-cmdencrypthookpasswordsysuser-)
* [cmd:pass,hook:password,sys:user](#-cmdpasshookpasswordsysuser-)
* [get:user,sys:user](#-getusersysuser-)
* [list:user,sys:user](#-listusersysuser-)
* [list:login,sys:user](#-listloginsysuser-)
* [list:verify,sys:user](#-listverifysysuser-)
* [login:user,sys:user](#-loginusersysuser-)
* [logout:user,sys:user](#-logoutusersysuser-)
* [make:verify,sys:user](#-makeverifysysuser-)
* [register:user,sys:user](#-registerusersysuser-)
* [remove:user,sys:user](#-removeusersysuser-)
* [sys:user,update:user](#-sysuserupdateuser-)
## Action Descriptions
### « `adjust:user,sys:user` »
Adjust user status idempotently (activated, etc.).
#### Parameters
* _active_ : boolean {presence:optional}
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
#### Replies With
```
{
ok: '_true_ if user found',
user: 'user entity'
}
```
----------
### « `auth:user,sys:user` »
Authenticate a login using token
#### Parameters
* _token_ : string {presence:required}
* _user_fields_ : array {presence:optional}
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
#### Replies With
```
{
ok: '_true_ if login is active',
user: 'user entity',
login: 'user entity'
}
```
----------
### « `change:pass,sys:user` »
Change user password.
#### Parameters
* _pass_ : string
* _repeat_ : string {presence:optional}
* _verify_ : string {presence:optional}
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
#### Replies With
```
{
ok: '_true_ if changed',
user: 'user entity'
}
```
----------
### « `change:handle,sys:user` »
Change user handle.
#### Parameters
* _new_handle_ : string
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
#### Replies With
```
{
ok: '_true_ if changed',
user: 'user entity'
}
```
----------
### « `change:email,sys:user` »
Change user email.
#### Parameters
* _new_email_ : string
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
#### Replies With
```
{
ok: '_true_ if changed',
user: 'user entity'
}
```
----------
### « `change:password,sys:user` »
Change user password.
#### Parameters
* _pass_ : string
* _repeat_ : string {presence:optional}
* _verify_ : string {presence:optional}
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
#### Replies With
```
{
ok: '_true_ if changed',
user: 'user entity'
}
```
----------
### « `check:verify,sys:user` »
Check a verfication entry.
#### Parameters
* _kind_ : string {presence:optional}
* _code_ : string {presence:optional}
* _now_ : number {presence:optional}
* _expiry_ : boolean {presence:optional}
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
#### Replies With
```
{
ok: '_true_ if valid',
why: 'string coded reason if not valid'
}
```
----------
### « `check:exists,sys:user` »
Check user exists.
#### Parameters
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
#### Replies With
```
{
ok: '_true_ if user exists',
user: 'user entity'
}
```
----------
### « `cmd:encrypt,hook:password,sys:user` »
Encrypt a plain text password string.
#### Examples
* `cmd:encrypt,hook:password,sys:user,pass:foofoobarbar`
* Result: {ok:true, pass:_encrypted-string_, salt:_string_}
#### Parameters
* _salt_ : string {presence:optional}
* _pass_ : string {presence:optional}
* _password_ : string {presence:optional}
* _rounds_ : number {presence:optional}
#### Replies With
```
{
ok: '_true_ if encryption succeeded',
pass: 'encrypted password string',
salt: 'salt value string'
}
```
----------
### « `cmd:pass,hook:password,sys:user` »
Validate a plain text password string.
#### Examples
* `cmd:pass,hook:password,sys:user,pass:goodpassword`
* Result: {ok:true}
#### Parameters
* _salt_ : string
* _pass_ : string
* _proposed_ : string
* _rounds_ : number {presence:optional}
#### Replies With
```
{
ok: '_true_ if password is valid',
why: 'string coded reason if not valid'
}
```
----------
### « `get:user,sys:user` »
Get user details
#### Parameters
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
#### Replies With
```
{
ok: '_true_ if user found',
user: 'user entity'
}
```
----------
### « `list:user,sys:user` »
List users
#### Parameters
* _active_ : boolean {presence:optional}
* _q_ : object {presence:optional}
#### Replies With
```
{
ok: '_true_ if user found',
items: 'user entity item list'
}
```
----------
### « `list:login,sys:user` »
List logins for a user
#### Parameters
* _active_ : boolean {presence:optional}
* _login_q_ : object {presence:optional}
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
#### Replies With
```
{
ok: '_true_ if user found',
items: 'user entity item list'
}
```
----------
### « `list:verify,sys:user` »
Create a verification entry (multiple use cases).
#### Parameters
* _kind_ : string
* _code_ : string {presence:optional}
* _once_ : boolean {presence:optional}
* _valid_ : boolean {presence:optional}
* _custom_ : object {presence:optional}
* _expire_point_ : number {presence:optional}
* _expire_duration_ : number {presence:optional}
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
#### Replies With
```
{
ok: '_true_ if user found',
verify: 'verify entity'
}
```
----------
### « `login:user,sys:user` »
Login user
#### Parameters
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
* _auto_ : boolean {presence:optional}
* _pass_ : string {presence:optional}
#### Replies With
```
{
ok: '_true_ if user logged in',
user: 'user entity',
login: 'login entity'
}
```
----------
### « `logout:user,sys:user` »
Login user
#### Parameters
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
* _token_ : string {presence:optional}
* _login_in_ : string {presence:optional}
* _login_q_ : object {presence:optional,default:{}}
* _load_logins_ : boolean {presence:optional}
#### Replies With
```
{
ok: '_true_ if user logged in',
count: 'number of logouts'
}
```
----------
### « `make:verify,sys:user` »
Create a verification entry (multiple use cases).
#### Parameters
* _kind_ : string
* _code_ : string {presence:optional}
* _once_ : boolean {presence:optional}
* _valid_ : boolean {presence:optional}
* _custom_ : object {presence:optional}
* _expire_point_ : number {presence:optional}
* _expire_duration_ : number {presence:optional}
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
#### Replies With
```
{
ok: '_true_ if user found',
verify: 'verify entity'
}
```
----------
### « `register:user,sys:user` »
Register a new user
#### Parameters
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _user_ : object {unknown:true}
* _user_data_ : object {unknown:true}
#### Replies With
```
{
ok: '_true_ if user registration succeeded',
user: 'user entity'
}
```
----------
### « `remove:user,sys:user` »
Remove a user
#### Parameters
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
#### Replies With
```
{
ok: '_true_ if user removed',
user: 'user entity'
}
```
----------
### « `sys:user,update:user` »
Update a user
#### Parameters
* _user_ : object {presence:optional}
* _id_ : string {presence:optional}
* _user_id_ : string {presence:optional}
* _email_ : string {presence:optional}
* _handle_ : string {presence:optional}
* _nick_ : string {presence:optional}
* _q_ : object {presence:optional}
* _fields_ : array {presence:optional}
#### Replies With
```
{
ok: '_true_ if user updated',
user: 'user entity'
}
```
----------
## License
Copyright (c) 2010-2020, Richard Rodger and other contributors.
Licensed under [MIT][].
[MIT]: ./LICENSE
[Seneca.js]: https://www.npmjs.com/package/seneca
[coveralls-badge]: https://coveralls.io/repos/github/senecajs/seneca-user/badge.svg?branch=master
[coveralls-url]: https://coveralls.io/github/senecajs/seneca-user?branch=master
[codeclimate-badge]: https://api.codeclimate.com/v1/badges/404faaa89a95635ddfc0/maintainability
[codeclimate-url]: https://codeclimate.com/github/senecajs/seneca-user/maintainability
[npm-badge]: https://img.shields.io/npm/v/@seneca/user.svg
[npm-url]: https://npmjs.com/package/@seneca/user
[Senecajs org]: https://github.com/senecajs/