2020-05-23 03:15:00
1238

Для одного из проектов мне потребовалось сделать собственный скрипт регистрации и последующей авторизации пользователя в аккаунте. Данные из формы отправляются на 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)

  1. Жанда 17 апреля 2023, 08:19 # 0
    Отличное решение, можете показать полное?