Moleculer services for Authentication
$ npm install imicros-auth --save
Requires a running Mongo Instance.
Requires a running service which can be called to handle
- requestVerificationMail
- requestPasswordReset
const { ServiceBroker } = require("moleculer");
const { Users } = require("imicros-auth");
broker = new ServiceBroker({
logger: console
});
service = broker.createService(Users, Object.assign({
settings: {
uri: mongoUri,
requestVerificationMail: {
call: "flow.publisher.emit",
params: {
topic: "users",
event: "requestVerificationMail",
payload: "params"
}
},
requestPasswordReset: {
call: "flow.publisher.emit",
params: {
topic: "users",
event: "requestPasswordReset",
payload: "params"
}
}
}
}));
broker.start();
action create { email, password, locale } => { user }
action requestConfirmationMail { email } => { sent }
action confirm { token } => { verified }
action requestPasswordResetMail { email } => { sent }
action resetPassword { token, password } => { result }
action login { email, password } => { user, token }
action resolveToken { token } => { user }
action me { } => { user }
For REST call via API. Or as a direct call:
let param = {
email: "example@test.com", // valid email
password: "my secret", // min 8
locale: "en" // optional - 2 character
}
broker.call("users.create", param).then(user => {
// user.id is filled
})
For REST call via API. Or as a direct call:
let param = {
email: "example@test.com" // registered email (user created)
}
broker.call("users.requestConfirmationMail", param).then(user => {
// calls the method under settings with default parameters:
// {
// email: user.email,
// locale: user.locale,
// token: token
// }
// the token should be added to a link in the confirmation mail
// in case of a successful call it returns
// {
// sent: "example@test.com"
// }
})
This method must be called by the method which handles the confirmation link in the confirmation mail.
let param = {
token: token // valid token (received as return value from requestConfirmationMail)
}
broker.call("users.confirm", param).then(user => {
// in case of a successful call it returns
// {
// verified: "example@test.com"
// }
})
For REST call via API. Or as a direct call:
let param = {
email: "example@test.com" // registered email (user created)
}
broker.call("users.requestPasswordResetMail", param).then(user => {
// calls the method under settings with default parameters:
// {
// email: user.email,
// locale: user.locale,
// token: token
// }
// in case of a successful call it returns
// {
// sent: "example@test.com"
// }
})
For REST call via API. Or as a direct call:
let param = {
token: token, // valid token (received as return value from requestPasswordResetMail)
password: "my new secret", // new password, min 8
}
broker.call("users.resetPassword", param).then(user => {
// in case of a successful call it returns
// {
// reset: user.id
// }
})
For REST call via API. Or as a direct call:
let param = {
email: "example@test.com", // registered email (user created)
password: "my secret" // min 8
}
broker.call("users.login", param).then(user => {
// in case of a successful call it returns
// {
// token: generated token
// user: user object
// }
})
This method is for calling in moleculer-web method authorize.
If further imicros services like imicros-groups or imicros-acl will be used, the user must be added to ctx.meta - at least user.id and user.email.
let param = {
token: token // valid token (received as return value from login)
}
broker.call("users.resolveToken", param).then(user => {
// in case of a successful call it returns
// {
// user: user object
// }
})
For REST call via API. Must be authorized by token - ctx.meta.user.id is then filled and the user is returned.
broker.call("users.me", param).then(user => {
// in case of a successful call it returns
// {
// user: user object
// }
})