Для одного из проектов мне потребовалось сделать собственный скрипт регистрации и последующей авторизации пользователя в аккаунте. Данные из формы отправляются на ajax и в зависимости от ответа, происходит редирект в профиль, либо сообщение об ошибке — это достаточно просто. Если нужно будет (в зависимости от Вашей обратной связи) добавляю полное решение для своей задачи, т.е. добавлю скрипты javascript, для взаимодействия с этим кодом.
<?
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';$request = \Bitrix\Main\Context::getCurrent()->getRequest();
$data = $request->getPostList()->toArray();
global $USER;// получаем данные из формы регистрации
$LOGIN = $data['LOGIN'];
$EMAIL = $data['EMAIL'];
$NAME = $data['NAME'];
$LAST_NAME = $data['LAST_NAME'];
$PASSWORD = $data['PASSWORD'];
$TYPE = $data['TYPE'];// получаем данные из формы регистрации
$group = array(5); // устанавливаем группу или группы пользователейif($TYPE = 'REG' & $EMAIL && $NAME && $LAST_NAME && $PASSWORD){
$filter = Array("EMAIL" => $EMAIL); // фильтр для проверки существования пользователя с email
$sql = CUser::GetList(($by="ID"), ($order="DESC"), $filter);
if(!$sql->NavNext(true, "f_"))
{
$randCode = randString(8); // генерируем случайную строку$user = new CUser;
$arFields = array(
"EMAIL" => $EMAIL,
"LOGIN" => $EMAIL,
"LID" => "ru",
"ACTIVE" => "N",
"GROUP_ID" => 5,
"PASSWORD" => $PASSWORD,
"CONFIRM_PASSWORD" => $PASSWORD,
"NAME" => $NAME,
"LAST_NAME" => $LAST_NAME,
"CONFIRM_CODE" => $randCode
);// после регистрации сразу авторизируем пользователя
$ID = $user->Add($arFields);
if(intval($ID) > 0){
if($USER->Authorize($ID)){
$arEventFields= array(
"LOGIN" => $arFields["LOGIN"],
"NAME" => $arFields["NAME"],
"LAST_NAME" => $arFields["LAST_NAME"],
"PASSWORD" => $arFields["PASSWORD"],
"EMAIL" => $arFields["EMAIL"],
"SERVER_NAME" => "api.n3zdrav.ru",
"CONFIRM_CODE" => $randCode,
"USER_ID" => $ID
);CEvent::Send("NEW_USER_CONFIRM", 's1', $arEventFields, "N", 5);
// отправляем сообщение пользователю с кодом активации аккаунта, можно сделать отправку почтового события в файле init.php
echo $ID;}}else echo 'N';
}
}
Комментарии (46)