Иногда нужно вметсе с авторизацией по номеру телеофна оставить вход чрезе соц сети.
В результате может получиться примерно следующее
Для этого нужно создать файл auth_socserv.php
со следующим содержимым
<div class="soc-avt" style="padding:16px;">
<?
//-----------------------------------------
$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",
"icons",
[
"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/auth_socserv.php
, а в файле '/ajax/auth.php` под кодом подклчюения комопнента модуля добавить следующий код
if(file_exists(__DIR__.'/auth_socserv.php'))
{
include __DIR__.'/auth_socserv.php';
}