Решение аспро мало чем отличается от других решений аспро в плане логики реализации авторизации /регистрации на сайте.
Чтобы помимо нашего комопннета отображадись и кнпоки входа через соц сети под формой, нужно создать файл /ajax/auth_socserv.php
со следующим содержимым
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die(); ?>
<div class="soc-avt" style="padding:16px;margin:0 auto;max-width:380px;">
<?
//-----------------------------------------
$arResult["FORM_TYPE"] = "login";
$arVarExcl = ["USER_LOGIN" => 1, "USER_PASSWORD" => 1, "backurl" => 1, "auth_service_id" => 1, "TYPE" => 1, "AUTH_FORM" => 1];
$arResult["GET"] = [];
$arResult["POST"] = [];
foreach ($_POST as $vname => $vvalue) {
if (!isset($arVarExcl[$vname])) {
if (!is_array($vvalue)) {
$arResult["POST"][htmlspecialcharsbx($vname)] = htmlspecialcharsbx($vvalue);
} else {
foreach ($vvalue as $k1 => $v1) {
if (is_array($v1)) {
foreach ($v1 as $k2 => $v2) {
if (!is_array($v2))
$arResult["POST"][htmlspecialcharsbx($vname) . "[" . htmlspecialcharsbx($k1) . "][" . htmlspecialcharsbx($k2) . "]"] = htmlspecialcharsbx($v2);
}
} else {
$arResult["POST"][htmlspecialcharsbx($vname) . "[" . htmlspecialcharsbx($k1) . "]"] = htmlspecialcharsbx($v1);
}
}
}
}
}
$arParamsToDelete = [
"login",
"logout",
"register",
"forgot_password",
"change_password",
"confirm_registration",
"confirm_code",
"confirm_user_id",
"logout_butt",
];
if (defined("AUTH_404"))
$arResult["AUTH_URL"] = htmlspecialcharsback(POST_FORM_ACTION_URI);
else
$arResult["AUTH_URL"] = $APPLICATION->GetCurPageParam("login=yes", array_merge($arParamsToDelete, ["logout_butt", "backurl"]));
$arResult["AUTH_SERVICES"] = false;
$arResult["CURRENT_SERVICE"] = false;
global $USER;
if (!$USER->IsAuthorized() && CModule::IncludeModule("socialservices")) {
$oAuthManager = new CSocServAuthManager();
$arServices = $oAuthManager->GetActiveAuthServices($arResult);
if (!empty($arServices)) {
$arResult["AUTH_SERVICES"] = $arServices;
if (isset($_REQUEST["auth_service_id"]) && $_REQUEST["auth_service_id"] <> '' && isset($arResult["AUTH_SERVICES"][$_REQUEST["auth_service_id"]])) {
$arResult["CURRENT_SERVICE"] = $_REQUEST["auth_service_id"];
if (isset($_REQUEST["auth_service_error"]) && $_REQUEST["auth_service_error"] <> '') {
$arResult['ERROR_MESSAGE'] = $oAuthManager->GetError($arResult["CURRENT_SERVICE"], $_REQUEST["auth_service_error"]);
} elseif (!$oAuthManager->Authorize($_REQUEST["auth_service_id"])) {
$ex = $APPLICATION->GetException();
if ($ex)
$arResult['ERROR_MESSAGE'] = $ex->GetString();
}
}
}
}
if (!empty($arResult['ERROR_MESSAGE'])) {
echo $arResult['ERROR_MESSAGE'];
}
?>
<?
/*<div class="title" style="padding-top:8px;">Быстрый вход через соцсети</div>*/ ?>
<?
$APPLICATION->IncludeComponent(
"bitrix:socserv.auth.form",
"auth",
[
"AUTH_SERVICES" => $arResult["AUTH_SERVICES"],
"AUTH_URL" => $arResult["AUTH_URL"],
// "COMPOSITE_FRAME_MODE" => "A",
// "COMPOSITE_FRAME_TYPE" => "AUTO",
//"POPUP" => "N",
"POST" => $arResult["POST"],
"SUFFIX" => "form"
]
); ?>
</div>
Для решения Аспро Премьер
форма авторизации / регистрации подгружается по ajax и отображается в попап окне.
Необходимо найти файл относительно корня сайта - /ajax/auth.php
. Сделайте его копию, назвать auth.ori.php. В оригинальный файл вставьте код ниже.
<?
// 23.05.2025
// содержимое файла /ajax/auth.php
<?
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
global $APPLICATION, $USER, $arTheme;
$url = (is_array($arTheme['PERSONAL_PAGE_URL']) ? $arTheme['PERSONAL_PAGE_URL']['VALUE'] : '') ?: SITE_DIR . 'personal/';
if ($_GET['auth_service_error']) {
LocalRedirect($url);
}
?>
<?
if (!$USER->IsAuthorized()): ?>
<?
if (isset($_REQUEST['backurl']) && $_REQUEST['backurl']) {
// fix ajax url
if ($_REQUEST['backurl'] != $_SERVER['REQUEST_URI']) {
$_SERVER['QUERY_STRING'] = '';
$_SERVER['REQUEST_URI'] = $_REQUEST['backurl'];
$APPLICATION->sDocPath2 = GetPagePath(false, true);
$APPLICATION->sDirPath = GetDirPath($APPLICATION->sDocPath2);
// $APPLICATION->reinitPath();
}
}
?>
<div id="wrap_ajax_auth">
<?
$bSkip = false;
//подклчюаем модуль
if (\Bitrix\Main\Loader::includeModule('bxmaker.authuserphone')) {
$oManager = \BXmaker\AuthUserPhone\Manager::getInstance();
//если модуль для текущего сайта включен
if ($oManager->isEnabled()) {
$bSkip = true;
$APPLICATION->IncludeComponent(
$oManager->param()->getDefaultComponent(),
'',
[
'COMPOSITE_FRAME_MODE' => 'N',
'RAND_STRING' => 'ajax'
]
);
// стили чтобы попап окно было соразмерно контенту компонента
?>
<style>
.auth_frame.popup {
width: auto;
max-width: 375px;
min-width: 375px;
}
.auth_frame.popup .close {
right: 25px;
top: 20px;
}
#popup_iframe_wrapper {
z-index: 980 !important;
}
.bxmaker-authuserphone-simple,
.bxmaker-authuserphone-enter {
box-shadow: none;
}
</style>
<?
/* https://bxmaker.ru/doc/authuserphone/how/avtorizatsiya-cherez-sotsseti/ */
if (file_exists(\Bitrix\Main\Application::getDocumentRoot() . '/ajax/auth_socserv.php')) {
include \Bitrix\Main\Application::getDocumentRoot() . '/ajax/auth_socserv.php';
}
}
}
// если модуль для текущего сайта не включен или вообще не установлен, показываем исходный вариант
if (!$bSkip) {
?>
<?
$APPLICATION->IncludeComponent(
"bitrix:system.auth.form",
"main",
[
"REGISTER_URL" => SITE_DIR . "auth/registration/?register=yes",
"PROFILE_URL" => SITE_DIR . "auth/",
"FORGOT_PASSWORD_URL" => SITE_DIR . "auth/forgot-password/?forgot-password=yes",
"AUTH_URL" => SITE_DIR . "auth/",
"SHOW_ERRORS" => "Y",
"POPUP_AUTH" => "Y",
"AJAX_MODE" => "Y",
"BACKURL" => ((isset($_REQUEST['backurl']) && $_REQUEST['backurl']) ? $_REQUEST['backurl'] : "")
]
); ?>
<?
}
?>
<?
// Для модуля - https://marketplace.1c-bitrix.ru/solutions/bxmaker.authid/
// подключение компонента модуля входа по ID
if (\Bitrix\Main\Loader::includeModule('bxmaker.authid')
&& \BXmaker\AuthID\Manager::getInstance()->option()->isEnabled()) {
?>
<div style="">
<?
$APPLICATION->IncludeComponent(
'bxmaker:authid.area',
'',
[
'SHOW_LINE' => 'Y'
]
)
?>
</div>
<?
}
// конец подключения компонента модуля входа по ID
?>
<!-- доп стили для лучшего отображения компонента модуля входа по ID -->
<style>
.popup #wrap_ajax_auth .bxmaker-authid-area {
margin-top: -16px;
}
.popup #wrap_ajax_auth .bxmaker-authid-area__list {
padding: 0 32px;
}
</style>
</div>
<?
elseif (strlen($_REQUEST['backurl'])): ?>
<script>location.href = <?
var_export($_REQUEST['backurl']) ?></script>
<?
else: ?>
<?
if (
strpos($_SERVER['HTTP_REFERER'], $url) === false &&
strpos($_SERVER['HTTP_REFERER'], SITE_DIR . 'ajax/form.php') === false
): ?>
<?
$APPLICATION->ShowHead(); ?>
<script>
jsAjaxUtil.ShowLocalWaitWindow('id', 'wrap_ajax_auth', true);
BX.reload(false)
</script>
<?
else: ?>
<script>location.href = <?
var_export($url) ?></script>
<?
endif; ?>
<?
endif; ?>
В итоге получиться примерно так
В мобильной версии авторизация находится не в popup окне а на отдельной странице /auth/
, на которой выводится комопнент решения Аспро.
Скопируйте файл /auth/index.php
и наховите index.ori.php
. Затем в скопируйте в первый файл код ниже
<?
//23.05.2025
// содержимое файла /ajax/auth.php
<?
// содержимое файла /ajax/auth.php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
$APPLICATION->SetTitle("Авторизация"); ?>
<?
$bSkip = false;
//подклчюаем модуль
if (\Bitrix\Main\Loader::includeModule('bxmaker.authuserphone')) {
$oManager = \BXmaker\AuthUserPhone\Manager::getInstance();
//если модуль для текущего сайта включен
if ($oManager->isEnabled()) {
global $APPLICATION;
$APPLICATION->SetPageProperty('TITLE_CLASS', 'center');
$APPLICATION->SetPageProperty('MENU', 'N');
$bSkip = true;
?>
<div style="text-align: center;"><?
$APPLICATION->IncludeComponent(
$oManager->param()->getDefaultComponent(),
'',
[
'COMPOSITE_FRAME_MODE' => 'N',
'RAND_STRING' => 'page'
]
);
// стили чтобы попап окно было соразмерно контенту компонента
?>
</div>
<style>
.bxmaker-authuserphone-simple,
.bxmaker-authuserphone-enter {
box-shadow: none;
}
.page-top-info {
display: none;
}
</style>
<?
/* https://bxmaker.ru/doc/authuserphone/how/avtorizatsiya-cherez-sotsseti/ */
if(file_exists(\Bitrix\Main\Application::getDocumentRoot().'/ajax/auth_socserv.php'))
{
include \Bitrix\Main\Application::getDocumentRoot().'/ajax/auth_socserv.php';
}
}
}
// если модуль для текущего сайта не включен или вообще не установлен, показываем исходный вариант
if (!$bSkip) {
?>
<?
$APPLICATION->IncludeComponent("aspro:auth.premier", "", [
"SEF_MODE" => "Y",
"SEF_FOLDER" => "/auth/",
"SEF_URL_TEMPLATES" => [
"auth" => "",
"registration" => "registration/",
"forgot" => "forgot-password/",
"change" => "change-password/",
"confirm" => "confirm-password/",
"confirm_registration" => "confirm-registration/",
],
"PERSONAL" => "/personal/"
],
false
); ?>
<?
}
?>
<?
// Для модуля - https://marketplace.1c-bitrix.ru/solutions/bxmaker.authid/
// подключение компонента модуля входа по ID
if (\Bitrix\Main\Loader::includeModule('bxmaker.authid')
&& \BXmaker\AuthID\Manager::getInstance()->option()->isEnabled()) {
?>
<div style="">
<?
$APPLICATION->IncludeComponent(
'bxmaker:authid.area',
'',
[
'SHOW_LINE' => 'Y',
'RAND_STRING' => 'AUTH_PAGE'
]
)
?>
</div>
<!-- доп стили для лучшего отображения компонента модуля входа по ID -->
<style>
.popup #wrap_ajax_auth .bxmaker-authid-area {
margin-top: -16px;
}
.popup #wrap_ajax_auth .bxmaker-authid-area__list {
padding: 0 32px;
}
</style>
<?
}
// конец подключения компонента модуля входа по ID
?>
<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php"); ?>
В итоге получиться примерно так