Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

User management from the console

Read this page if you look after the user accounts of an installation and want to do it from a shell, a deploy script or a CI job. Exponential 6.0.15 adds the exp:user commands: list, inspect, create, change, disable…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/features/6.0/user-management-from-the-console.md

On this page

User management from the console

Read this page if you look after the user accounts of an installation and want to do it from a shell, a deploy script or a CI job. Exponential 6.0.15 adds the exp:user commands: list, inspect, create, change, disable, enable and remove accounts, reset passwords, approve registrations, manage groups, roles, sessions and two-step sign-in, import, export, change many accounts at once, and read the user audit log. Each command does what the administration does, through the same operations and with the same audit events.

In short

  • 24 commands under exp:user:*, each with --help and the generated console commands reference.
  • A dry run unless --apply. Every command that changes something lists first what it would do and which checks fail. --dry-run is accepted; both together are a usage error.
  • No password on the command line. A password comes from standard input (--password-stdin), is generated and printed once, or is chosen by the person through the activation or reset mail. An import file with a password column is refused. No output ever holds a password hash.
  • Who acts is recorded. The commands act as the user of site.ini [UserSettings] UserCreatorID, or as --as. The audit trail and the user audit log name that user and the siteaccess.
  • Protected accounts are never disabled or removed: the anonymous user, the UserCreatorID user, the administrator account (id 14 or the login admin), the user who acts and the last enabled administrator.
  • The same as a click. Accounts are created and changed through the content publish, so workflows and the approval of new accounts run; disabling uses user/setsettings and ends every session.
  • For scripts: --format=json prints the schema exp-user/1; the exit codes are 0 done, 1 failed or refused, 2 usage, 3 database unreachable, 4 internal error. Options and keys are a permanent contract.

The commands

CommandWhat it doesChanges
exp:user:listaccounts by state, group and search, with pagingno
exp:user:show <user>one account: groups, roles, state, registration, sign-ins, two-step sign-in, sessionsno
exp:user:createcreates an account through the content publishyes
exp:user:edit <user>e-mail address, login, names, groups, main groupyes
exp:user:disable <user>, exp:user:enable <user>disables (and ends the sessions), enables againyes
exp:user:delete <user>removes the account for goodyes
exp:user:reset-password <user>the reset link, a generated password or one from standard inputyes
exp:user:require-password-change <user>a new password at the next sign-in (--clear removes the mark)yes
exp:user:check-login <user>whether a password from standard input signs the account in; exit 0 yes, 1 nono
exp:user:pendingregistrations that waitno
exp:user:approve <user>approves a registration, or rejects it with --rejectyes
exp:user:resend-activation <user>the activation mail again, with a new keyyes
exp:user:groups [action] [group]lists, creates, renames, moves and deletes user groupsyes
exp:user:roles [action] [role] [target]lists, assigns and unassigns roles, with a subtree or section limitationyes
exp:user:whoamithe account the console acts as, its roles, whether it has every rightno
exp:user:sessions <user>the tracked sessions; --end or --session=<id> ends themyes
exp:user:unlock <user>resets the failed sign-in counter of a locked accountyes
exp:user:2fa <user>two-step sign-in and passkeys; --reset, --remove-passkeysyes
exp:user:exportthe accounts the filters select, as CSV or JSON, without passwordsno
exp:user:import <file>accounts from CSV or JSON, each as exp:user:create would create ityes
exp:user:bulk <action>disable, enable, delete, approve, reject or unlock many accounts, with --confirm=<count>yes
exp:user:audit <user>the user audit log rows about the account or by itno
exp:user:hygienethe accounts per state, each with the exp:user:list command that lists themno

<user> is a login, an e-mail address (when only one account has it) or the account's id. A group is a node id or a name; a role is a name or an id.

The audit events

CommandEvents
create, editthe content publish events; access.user.email.change, access.user.login.change
disable, enable, unlockaccess.user.disable, access.user.enable, access.user.unlock
reset-passwordaccess.user.password.change, access.user.password.reset.request
approveaccess.registration.approve, access.registration.reject
rolesaccess.role.assign, access.role.unassign
sessionsaccess.session.revoke
2faaccess.user.two_factor.remove, access.passkey.*

No event ever holds a password.

What is deliberately not offered

  • Merging two accounts. The kernel has no safe way to move the ownership of content, versions, role assignments and history from one account to another.
  • Passwords in import files, and a --password option: both would spread passwords where they stay.
  • Deactivate and move. The console disables; it does not move accounts into the group for deactivated accounts. Use the administration for that (Check user accounts).

Settings

The commands add no settings. They read:

FileBlockKeyUsed for
site.ini[UserSettings]UserCreatorIDthe user who acts by default; protected
site.ini[UserSettings]AnonymousUserIDprotected
site.ini[UserSettings]UserClassID, DefaultUserPlacementthe class and group of a new account
site.ini[UserSettings]RequireUniqueEmailthe e-mail check on create, edit and import
site.ini[UserSettings]MaxNumberOfFailedLoginlocked accounts
site.ini[UserSettings]ForgotPasswordKeyLifetimehow long the reset link works
content.ini[NodeSettings]UserRootNodethe top of the Users tree for exp:user:groups

Where to go next

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x