Задать вопрос
@denism300

Почему не срабатывает регистрация пользователя в битрикс?

Есть два сайта на одном ядре. Условно, site.ru и account.site.ru
На account.site.ru размещены личный кабинет и формы регистрации и авторизации, реализованные на ajax.
Проблема в том, что при отправке формы регистрации сама регистрация пользователя не происходит.
В админке "Позволять ли пользователям регистрироваться самостоятельно" отмечено, заданы группы для добавления нового пользователя.
Это ajax обработчик
<?
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');

\Bitrix\Main\Loader::IncludeModule('victory.options');

use Bitrix\Main\Web\Json;
use Victory\Options\CVictoryOptions;

global $APPLICATION;
global $USER;

$response = array();

if ($USER->IsAuthorized()) {
    if (CSite::InGroup(array(1, 8))) {
        $response['STATUS']   = 'OK';
        $response['REDIRECT'] = '/manager/index.php';
    } elseif (CSite::InGroup(array(7))) {
        $response['STATUS']   = 'OK';
        $response['REDIRECT'] = '/user/index.php';
    } else {
        $response['STATUS']   = 'OK';
        $response['CONTENT']  = '<div class="account-form--header register-form--header text-left">Регистрация завершена!</div>';
        $response['CONTENT'] .= '<p>Мы проверим вашу информацию в течение 2-х дней, после чего вам будет направлено Уведомление об открытии доступа к личному кабинету.</p>';
        $response['CONTENT'] .= '<p>Если Вам не придёт уведомление в течение 2-х дней, обратитесь, пожалуйста, в техническую поддержку по телефону: <b>' . CVictoryOptions::getOptionValue("company_phone_1") . '</b></p>';
    }

    echo Json::encode($response);

    die();
}

$response['USER']      = '<pre>' . print_r($USER, 1) . '</pre>';
$response['USER_AUTH'] = '<pre>' . print_r($USER->IsAuthorized(), 1) . '</pre>';

if (isset($_POST['TYPE']) && $_POST['TYPE']) {
    switch ($_POST['TYPE']) {
        case 'AUTH':
            $APPLICATION->IncludeComponent(
                "bitrix:system.auth.form",
                "",
                array(
                    "FORGOT_PASSWORD_URL" => "",
                    "PROFILE_URL"         => "profile.php",
                    "REGISTER_URL"        => "register.php",
                    "SHOW_ERRORS"         => "Y"
                )
            );

            if (isset($_POST['AJAX-ACTION']) && $_POST['AJAX-ACTION'] == 'AUTH') {
                $APPLICATION->RestartBuffer();

                header('Content-type: application/json');

                if (
                    (isset($arResult['ERROR']) && $arResult['ERROR'] === true)
                    || (!empty($arResult['ERROR_MESSAGE']) && isset($arResult['ERROR_MESSAGE']['TYPE']) && $arResult['ERROR_MESSAGE']['TYPE'] == 'ERROR')
                ) {
                    $response = array(
                        'STATUS'  => 'ERROR',
                        'MESSAGE' => strip_tags($arResult['ERROR_MESSAGE']['MESSAGE'])
                    );
                }

                echo Json::encode($response);

                die();
            }

            break;

        case 'REGISTER':
            $APPLICATION->IncludeComponent(
                "bitrix:main.register",
                "",
                array(
                    "AUTH"               => "Y",
                    "REQUIRED_FIELDS"    => array("EMAIL", "PHONE_NUMBER", "NAME", "LAST_NAME"),
                    "SET_TITLE"          => "N",
                    "SHOW_FIELDS"        => array("EMAIL", "PHONE_NUMBER", "NAME", "SECOND_NAME", "LAST_NAME", "PERSONAL_PHONE"),
                    "SUCCESS_PAGE"       => "",
                    "USER_PROPERTY"      => array(),
                    "USER_PROPERTY_NAME" => "",
                    "USE_BACKURL"        => "",
                )
            );

            if (isset($_POST['AJAX-ACTION']) && $_POST['AJAX-ACTION'] == 'REGISTER') {
                $APPLICATION->RestartBuffer();

                header('Content-type: application/json');

                $response['POST']     = '<pre>' . print_r($_POST, 1) . '</pre>';

                if (!$USER->IsAuthorized()) {
                    if (!empty($arResult["ERRORS"])) {
                        foreach ($arResult["ERRORS"] as $key => $error) {
                            if (intval($key) == 0 && $key !== 0) {
                                $arResult["ERRORS"][$key] = str_replace("#FIELD_NAME#", """ . GetMessage("REGISTER_FIELD_" . $key) . """, $error);
                            }
                        }
                        $response['STATUS']  = 'ERROR';
                        $response['MESSAGE'] = implode("<br>", $arResult["ERRORS"]);
                        $response['ERRORS']  = $arResult["ERRORS"];
                    } elseif ($arResult["USE_EMAIL_CONFIRMATION"] === "Y") {
                        $response['STATUS']   = 'OK';
                        $response['CONTENT']  = '<div class="account-form--header register-form--header text-left">Регистрация завершена!</div>';
                        $response['CONTENT'] .= '<p>' . GetMessage("REGISTER_EMAIL_WILL_BE_SENT") . '</p>';
                    }
                }

                echo Json::encode($response);

                die();
            }

            break;
    }
}


В отладке, в $response['USER_AUTH'] пусто, в $response['POST'] все данные из формы регистрации

Не работает ни со стандартными шаблонами ни с кастомизированными.
Версия битрикс последняя на момент написания поста.
  • Вопрос задан
  • 116 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
cyber-jet
@cyber-jet
Если значения полей формы собирает JavaScript в браузере, скорее всего через интерфейс FormData(), туда не попадает значение кнопки submit. При синхронной обработке на стороне сервера такой проблемы бы не было. Часто так бывает что у формы есть несколько кнопок сабмит с разными именами и(или) значениями, внутри обработчика события доступ к сработавшей кнопке можно получить через event.submitter.
document.getElementById("form").addEventListener("submit", (event) => {
  event.preventDefault();
  let data = new FormData(event.target);
  if (event.submitter) {
    data.append(event.submitter.name, event.submitter.value);
  }

  // ...скрипт отправки формы
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы