Extension:ConfirmAccount

The ConfirmAccount extension disables direct account creation and requires the approval of new accounts by a bureaucrat. Direct account creation can still be enabled (if you want Sysops/Bureaucrats to be able to directly make them) by configuring user rights.

The ConfirmEdit extension can be used (in conjunction with the ConfirmAccount extension) in order to use captchas to stop flood requests.

The new user log (now obsolete) extension also works with ConfirmAccount.

Setup

 * Download the latest snapshot of the extension version that matches your Mediawiki install version and extract it to your extensions directory. Select the snapshot for your version of MediaWiki.
 * version =< 1.16: To LocalSettings.php add:


 * version >= 1.17: To LocalSettings.php add:

php maintenance/update.php
 * Change to the MediaWiki directory and run:

or, if not possible, run ConfirmAccount.sql (substituting db prefix and options): mysql -h DB_HOST -u WIKIUSER -p  WIKIDB  <  ConfirmAccount.sql

sqlite3 /var/www/vhosts/domain.com/data/databasefile < ConfirmAccount.sql
 * If you are using sqlite, go into LocalSetting.php and add $wgDBprefix =""; and then run the below command and php maintenance/update.php afterwards:

Configuration
There are several configuration variables that can be adjusted in LocalSettings.php. (The default values are in ConfirmAccount.php, but you should not edit that file).

{| class="wikitable" ! Variable !! Default !! Description
 * + Configuration variables
 * || true || Replace a new user's new page with their biography if set to true. Some options below may append to their new page. These options have no effect if this is set to false. [Type: boolean].
 * || true || Replace the new user's talk page with a welcome message if set to true. Configurable at MediaWiki:Confirmaccount-welc. [Type: boolean].
 * || true || If set to true requires users (usernames) to use their real name. [Type: boolean].
 * || One week || How long, in seconds, rejected requests are kept before being discarded. [Type: positive integer]
 * || One month || How long, in seconds, until inactive requests become rejected. [Type: positive integer].
 * || 1 || Count of how many requests can come from an IP address per day. This only matters if throttling is true. [Type: positive integer].
 * || 50 || Minimum word count in user biography. [Type: positive integer].
 * || true || If set to true show the Terms of Service checkbox on the request form and require it to be checked to submit the form. [Type: boolean].
 * || true || If set to true show the extra confirmation fields such as resume, contacts, urls, and CV. [Type: boolean].
 * || true || Allows users to attach a file to their request if set to true. [Type: boolean].
 * || 1 || Count of how many requests can come from an IP address per day. This only matters if throttling is true. [Type: positive integer].
 * || 50 || Minimum word count in user biography. [Type: positive integer].
 * || true || If set to true show the Terms of Service checkbox on the request form and require it to be checked to submit the form. [Type: boolean].
 * || true || If set to true show the extra confirmation fields such as resume, contacts, urls, and CV. [Type: boolean].
 * || true || Allows users to attach a file to their request if set to true. [Type: boolean].
 * || true || If set to true show the Terms of Service checkbox on the request form and require it to be checked to submit the form. [Type: boolean].
 * || true || If set to true show the extra confirmation fields such as resume, contacts, urls, and CV. [Type: boolean].
 * || true || Allows users to attach a file to their request if set to true. [Type: boolean].
 * || true || Allows users to attach a file to their request if set to true. [Type: boolean].
 * || true || Allows users to attach a file to their request if set to true. [Type: boolean].

This has no effect if $wgAccountRequestExtraInfo is set to false.
 * || 'txt', 'pdf', 'doc', 'latex', 'rtf', 'text', 'wp', 'wpd', 'sxw' || Array of strings containing the file types that a user is allowed to upload. [Type: array(string)].
 * || 'txt', 'pdf', 'doc', 'latex', 'rtf', 'text', 'wp', 'wpd', 'sxw' || Array of strings containing the file types that a user is allowed to upload. [Type: array(string)].

This has no effect if $wgAllowAccountRequestFiles is set to false.
 * || erm... || A key/value map where the key is 'accountreqs' and the value is an associative array that contains the directory, url, and hash of the account request attachment storage location. The default value should work as long as MW is able to create folders with the correct permissions in the  directory. [Type: array('accountreqs' => array('directory'=>string, 'url'=>string, 'hash'=>integer)) ].
 * ||  || If  is set to true'' this text is appended to the end of each user's automatic user page text. [Type: string ].
 * || 'authors', 'user', null || An array, with integer keys, of sub-arrays. These sub-arrays have values of the form (subpage param, user group, autotext). The subpage param (string) is used to separate the queues when browsing Special:ConfirmAccount. The user group (string) lets people approved to a certain position start off with a corresponding user group. (You can still grant any position to anyone, regardless of what they applied for, however.) The optional autotext value is added to the end of the user page of new accounts. The default is  where autotext is empty. [Type: array(integer => array(string,string,string)) ].
 * || true || If set to true the applicant's information is saved and accessible via Special:UserCredentials for users with the 'lookupcredentials' right. [Type: boolean ].
 * || erm... || similar to  above but for permanent storage. [Type: array('accountcreds' => array('directory' => string, 'url' => string, 'hash'=>integer) ].
 * || false || If set non-empty send an email to this address whenever an account request has the email address confirmed. [Type: string ].
 * . So if 0 is the index for 'authors', then 'authors' interested in a topic will have the group0 text appended to their biography. This can be useful, say, if users can be approved as either authors or editors. Authors can have "category:X authors" where X is a topic, like "mathematics", and editors can have "category:x editors". You can have as many groups as you want, but you need at least one.
 * || true || If set to true the applicant's information is saved and accessible via Special:UserCredentials for users with the 'lookupcredentials' right. [Type: boolean ].
 * || erm... || similar to  above but for permanent storage. [Type: array('accountcreds' => array('directory' => string, 'url' => string, 'hash'=>integer) ].
 * || false || If set non-empty send an email to this address whenever an account request has the email address confirmed. [Type: string ].
 * . So if 0 is the index for 'authors', then 'authors' interested in a topic will have the group0 text appended to their biography. This can be useful, say, if users can be approved as either authors or editors. Authors can have "category:X authors" where X is a topic, like "mathematics", and editors can have "category:x editors". You can have as many groups as you want, but you need at least one.
 * || false || If set non-empty send an email to this address whenever an account request has the email address confirmed. [Type: string ].
 * . So if 0 is the index for 'authors', then 'authors' interested in a topic will have the group0 text appended to their biography. This can be useful, say, if users can be approved as either authors or editors. Authors can have "category:X authors" where X is a topic, like "mathematics", and editors can have "category:x editors". You can have as many groups as you want, but you need at least one.
 * . So if 0 is the index for 'authors', then 'authors' interested in a topic will have the group0 text appended to their biography. This can be useful, say, if users can be approved as either authors or editors. Authors can have "category:X authors" where X is a topic, like "mathematics", and editors can have "category:x editors". You can have as many groups as you want, but you need at least one.

Use

 * 1) As a bureaucrat (or other user with the confirmaccount permission), browse to Special:ConfirmAccounts
 * 2) Click Review
 * 3) You will see the whole form with the users' data. Carefully review the form, and proceed to creating the account or rejecting the request.
 * 4) If you chose to create the account, the user's biography will become their userpage and the userpage will be automatically created with the default summary of Creating user page with biography of new user.

Known issues

 * Do not set $wgGroupPermissions['*']['createaccount'] to true in LocalSettings, it will override the request login and allow users to sign up without confirmation.
 * Do not set MediaWiki:Requestaccount-areas/xx where xx is a language code, the first part of each line is used as the keys to store in the DB for the items account requesters check.
 * Older versions of MediaWiki may not show the link to Special:RequestAccount at the user login form. You can edit MediaWiki:loginprompt to remedy this.
 * Name collisions: account creations will be checked and stopped if it collides with a pending name. Requests are checked for pending/account name collisions too.
 * AuthPlugin stuff: If a central login is used, when accounts are confirmed and made, we may get name collisions if each wiki of the farm lets you request accounts on it. Collisions are dealt with by picking a new name.
 * If your email client loses its mail data before sending it out, users will not get their passwords but may have an account. Since no one knows the passwords, you may want to use Extension:Password Reset to send them new ones.
 * If only a few people view the confirm accounts page, the randomly triggered pruning of old request will not trigger often, so old rejected requests may persist.
 * Integration with LDAP Authentication extension

External link

 * Citizendium's account request form (ConfirmAccount and ConfirmEdit are enabled)
 * Hindupedia's account request form (ConfirmAccount is enabled)