User resource for the-db
$ npm install the-resource-user --save
'use strict'
const theDb = require('the-db')
const {
TheUserResource
} = require('the-resource-user')
async function tryExample () {
// Create a db instance
let db = theDb({
dialect: 'memory'
})
db.load(class extends TheUserResource { /* ... */ }, 'User')
db.load(class extends TheUserResource.Sign { /* ... */ }, 'UserSign')
db.load(class extends TheUserResource.Profile { /* ... */ }, 'UserProfile')
db.load(class extends TheUserResource.Role { /* ... */ }, 'UserRole')
let {
User,
UserSign,
UserProfile,
UserRole
} = db.resources
let session = {}
// Signup an user
async function signup (username, password, options = {}) {
let { email = null, profile = {}, roles = [] } = options
let user = await User.create({ username, email })
user.sign = await UserSign.create({ user, password })
user.profile = await UserProfile.create({ user, profile })
user.roles = await UserRole.createBulk(roles.map((code) => ({ user, code })))
await user.save()
return user
}
// Start user session
async function signin (username, password, options = {}) {
let { agent } = options
let user = await User.only({ username })
let sign = user && await UserSign.only({ user })
let valid = sign && await sign.testPassword(password)
if (!valid) {
throw new Error('Signin failed!')
}
await user.sync()
session.signed = user
return user
}
// Finish session
async function signout (token) {
delete session.signed
}
// Call the functions
{
await signup('user01', 'xxxxxxxx', {
roles: [ 'OPERATOR', 'CONSUMER' ]
})
let { token } = signin('user01', 'xxxxxxxx')
/* ... */
await signout(token)
}
}
tryExample().catch((err) => console.error(err))
- TheUserResource Policy
- TheUserProfileResource Policy
- TheUserRoleResource Policy
- TheUserSignResource Policy
- TheUserVerifyResource Policy
Property | Description | Type | Required | Unique |
---|---|---|---|---|
name |
Name to identify the user | "cly:string" | true | true |
email |
User email | "cly:string" | true | |
profile |
Use profile | "cly:entity" | ||
sign |
User signature | "cly:entity" | ||
roles |
Use roles | "cly:entity" |
Property | Description | Type | Required | Unique |
---|---|---|---|---|
user |
"cly:entity" | true | ||
name |
"cly:string" | |||
image |
"cly:string" |
Property | Description | Type | Required | Unique |
---|---|---|---|---|
user |
Pointer to user entity | "cly:entity" | true | |
code |
Role code | "cly:string" | true |
Property | Description | Type | Required | Unique |
---|---|---|---|---|
user |
Pointer to user entity | "cly:entity" | true | |
password |
Password string | "cly:string" | ||
passwordHash |
Sign code | "cly:string" | ||
salt |
Salt of password | "cly:string" | ||
algorithm |
Digest algorithm | "cly:string" |
Property | Description | Type | Required | Unique |
---|---|---|---|---|
user |
Pointer to user entity | "cly:entity" | true | |
target |
Verify target | "cly:string" | true | |
token |
Verify token | "cly:string" | true | true |
expiredAt |
Date expire | "cly:date" | ||
done |
Done or not | "cly:boolean" |
This software is released under the MIT License.