Авторизация по номеру телефона

Авторизация через соцсети

Иногда нужно вметсе с авторизацией по номеру телеофна оставить вход чрезе соц сети.

Результат

В результате может получиться примерно следующее

2024-06-28_20-57.jpg

Что делать

Для этого нужно создать файл 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';
}