Service Hooks
The feathers-authentication-management
service does not handle creation of a new user account nor the sending of the initial sign up verification notification. Instead hooks are provided to be used with the users
service create
method. If you set a service path other than the default of '/authManagement'
, the custom path name must be passed into the hook.
addVerification
This hook is made exclusively for the /users
service. Creates tokens and sets default authManagement
data for users.
before | after | methods | multi | details |
---|---|---|---|---|
yes | no | create, patch, update | no | source |
- Arguments:
path?: string
Argument | Type | Default | Description |
---|---|---|---|
path | string | authManagement | The path of the service. This is required, if the service is configured with a different path than the default authManagement . |
- Example:
// src/services/users/users.hooks.js
const { authenticate } = require("@feathersjs/authentication").hooks;
const { hashPassword, protect } = require("@feathersjs/authentication-local").hooks;
const { addVerification, removeVerification } = require("feathers-authentication-management");
const authNotifier = require("./path-to/your/notifier");
const {
disallow,
iff,
isProvider,
preventChanges,
} = require("feathers-hooks-common");
module.exports = {
before: {
all: [],
find: [authenticate("jwt")],
get: [authenticate("jwt")],
create: [
hashPassword("password"),
addVerification("auth-management"), // adds .isVerified, .verifyExpires, .verifyToken, .verifyChanges
],
update: [
disallow("external"),
authenticate("jwt"),
hashPassword("password"),
],
patch: [
authenticate("jwt"),
iff(
isProvider("external"),
preventChanges(
true,
"email",
"isVerified",
"verifyToken",
"verifyShortToken",
"verifyExpires",
"verifyChanges",
"resetToken",
"resetShortToken",
"resetExpires"
),
hashPassword("password")
),
],
remove: [authenticate("jwt"), hashPassword("password")],
},
after: {
all: [],
find: [protect("password")],
get: [protect("password")],
create: [
protect("password"),
(context) => {
// Send an e-mail/SMS with the verification token
authNotifier(context.app).notifier("verifySignupLong", context.result);
},
removeVerification(), // removes verification/reset fields other than .isVerified from the response
],
update: [protect("password")],
patch: [protect("password")],
remove: [protect("password")],
},
error: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: [],
},
};
// src/services/users/users.hooks.js
const { authenticate } = require("@feathersjs/authentication").hooks;
const { hashPassword, protect } = require("@feathersjs/authentication-local").hooks;
const { addVerification, removeVerification } = require("feathers-authentication-management");
const authNotifier = require("./path-to/your/notifier");
const {
disallow,
iff,
isProvider,
preventChanges,
} = require("feathers-hooks-common");
module.exports = {
before: {
all: [],
find: [authenticate("jwt")],
get: [authenticate("jwt")],
create: [
hashPassword("password"),
addVerification("auth-management"), // adds .isVerified, .verifyExpires, .verifyToken, .verifyChanges
],
update: [
disallow("external"),
authenticate("jwt"),
hashPassword("password"),
],
patch: [
authenticate("jwt"),
iff(
isProvider("external"),
preventChanges(
true,
"email",
"isVerified",
"verifyToken",
"verifyShortToken",
"verifyExpires",
"verifyChanges",
"resetToken",
"resetShortToken",
"resetExpires"
),
hashPassword("password")
),
],
remove: [authenticate("jwt"), hashPassword("password")],
},
after: {
all: [],
find: [protect("password")],
get: [protect("password")],
create: [
protect("password"),
(context) => {
// Send an e-mail/SMS with the verification token
authNotifier(context.app).notifier("verifySignupLong", context.result);
},
removeVerification(), // removes verification/reset fields other than .isVerified from the response
],
update: [protect("password")],
patch: [protect("password")],
remove: [protect("password")],
},
error: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: [],
},
};
isVerified
Throws, if requesting user is not verified (params.user.isVerified
) and passes otherwise. Please make sure to call authenticate('jwt')
before.
before | after | methods | multi | details |
---|---|---|---|---|
yes | no | all | yes | source |
Arguments:
- none
Example:
const { authenticate } = require("@feathersjs/authentication").hooks;
const { isVerified } = require("feathers-authentication-management");
module.exports = {
before: {
all: [authenticate("jwt"), isVerified()],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: [],
},
after: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: [],
},
error: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: [],
},
};
const { authenticate } = require("@feathersjs/authentication").hooks;
const { isVerified } = require("feathers-authentication-management");
module.exports = {
before: {
all: [authenticate("jwt"), isVerified()],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: [],
},
after: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: [],
},
error: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: [],
},
};
removeVerification
This hook is made exclusively for the /users
service. It deletes data on user items for external requests that was added for feathers-authentication-management
to work. It is similar to the protect('password')
hook from @feathersjs/authentication-local
. It deletes verifyExpires
, resetExpires
and verifyChanges
and if ifReturnToken: true
it also deletes verifyToken
, verifyShortToken
, resetToken
and resetShortToken
.
before | after | methods | multi | details |
---|---|---|---|---|
no | yes | all | yes | source |
- Arguments:
ifReturnToken?: boolean
Argument | Type | Default | Description |
---|---|---|---|
ifReturnToken | boolean | false | removes |
- Example: See the example under addVerification