How can I create a new Joomla user account from within a script? How can I create a new Joomla user account from within a script? php php

How can I create a new Joomla user account from within a script?


You should use Joomla internal classes, like JUser, since there a lot of internal logic such as password salting. Create a custom script that uses the values from the API request and saves the users in the database using methods from Joomla User Classes.

Two ways to add joomla users using your custom code is a wonderful tutorial. The approach works. I've used this approach in some projects.

If you have to access Joomla Framework outside Joomla, check this resource instead.


Based on the answer from waitinforatrain, which is not properly working for logged-in users (actually dangerous if you are using it in the back-end), I have modified it a bit and here it is, fully working for me. Please note that this is for Joomla 2.5.6, while this thread was originally for 1.5, hence the answers above:

function addJoomlaUser($name, $username, $password, $email) {    jimport('joomla.user.helper');    $data = array(        "name"=>$name,        "username"=>$username,        "password"=>$password,        "password2"=>$password,        "email"=>$email,        "block"=>0,        "groups"=>array("1","2")    );    $user = new JUser;    //Write to database    if(!$user->bind($data)) {        throw new Exception("Could not bind data. Error: " . $user->getError());    }    if (!$user->save()) {        throw new Exception("Could not save user. Error: " . $user->getError());    }    return $user->id; }


Just go to documentation page:http://docs.joomla.org/JUser

Also competed sample of single page to register new users in Joomla:

<?php function register_user ($email, $password){  $firstname = $email; // generate $firstname $lastname = ''; // generate $lastname $username = $email; // username is the same as email /* I handle this code as if it is a snippet of a method or function!! First set up some variables/objects     */ // get the ACL $acl =& JFactory::getACL(); /* get the com_user params */ jimport('joomla.application.component.helper'); // include libraries/application/component/helper.php $usersParams = &JComponentHelper::getParams( 'com_users' ); // load the Params // "generate" a new JUser Object $user = JFactory::getUser(0); // it's important to set the "0" otherwise your admin user information will be loaded $data = array(); // array for all user settings // get the default usertype $usertype = $usersParams->get( 'new_usertype' ); if (!$usertype) {     $usertype = 'Registered'; } // set up the "main" user information //original logic of name creation //$data['name'] = $firstname.' '.$lastname; // add first- and lastname $data['name'] = $firstname.$lastname; // add first- and lastname $data['username'] = $username; // add username $data['email'] = $email; // add email $data['gid'] = $acl->get_group_id( '', $usertype, 'ARO' );  // generate the gid from the usertype /* no need to add the usertype, it will be generated automaticaly from the gid */ $data['password'] = $password; // set the password $data['password2'] = $password; // confirm the password $data['sendEmail'] = 1; // should the user receive system mails? /* Now we can decide, if the user will need an activation */ $useractivation = $usersParams->get( 'useractivation' ); // in this example, we load the config-setting if ($useractivation == 1) { // yeah we want an activation     jimport('joomla.user.helper'); // include libraries/user/helper.php     $data['block'] = 1; // block the User     $data['activation'] =JUtility::getHash( JUserHelper::genRandomPassword() ); // set activation hash (don't forget to send an activation email) } else { // no we need no activation     $data['block'] = 1; // don't block the user } if (!$user->bind($data)) { // now bind the data to the JUser Object, if it not works....     JError::raiseWarning('', JText::_( $user->getError())); // ...raise an Warning     return false; // if you're in a method/function return false } if (!$user->save()) { // if the user is NOT saved...     JError::raiseWarning('', JText::_( $user->getError())); // ...raise an Warning     return false; // if you're in a method/function return false } return $user; // else return the new JUser object } $email = JRequest::getVar('email'); $password = JRequest::getVar('password'); //echo 'User registration...'.'<br/>'; register_user($email, $password); //echo '<br/>'.'User registration is completed'.'<br/>';?>

Please note that for registration used only email and password.

The sample of call:localhost/joomla/test-reg-user-php?email=test02@test.com&password=passor just create simple form with appropriate parameters