Кто может помочь?! Необходима авторизация по логину и по email. То есть если логин и email не равны, то при вводе в полу "Логин или email" логина или email мы пытаемся выяснить что ввёл пользователь и проверить с базой - есть ли там пользователь с таким email или с таким логином и авторизовать этого пользователя при успешном совпадении.
Решение Аспро ЛайтШоп (версия 2.3.0)
В данном коде закомментировал заводской вывод вёрстки и добавил новый с универсальным полем для ввода логина или email
также добавил код в файле .component компонента system.auth.form
что еще надо кастомизировать для подобной работы авторизации?!
сейчас пишет Неверный логин или пароль - ну вывод (print_r($APPLICATION->arAuthResult)
говорит о том что неверный логин, значит он еще где-то проверяется, не найду где
Решение Аспро ЛайтШоп (версия 2.3.0)
В данном коде закомментировал заводской вывод вёрстки и добавил новый с универсальным полем для ввода логина или email
| Код |
|---|
<!-- <div class="form-group fill-animate" data-sid="USER_LOGIN_POPUP">
<label class="font_14" for="USER_LOGIN_POPUP<?=$rand?>">
<span><?=GetMessage("AUTH_LOGIN")?> <span class="required-star">*</span></span>
</label>
<div class="input">
<input type="text" name="USER_LOGIN" id="USER_LOGIN_POPUP<?=$rand?>"
class="form-control required" maxlength="50"
value="<?=$arResult["USER_LOGIN"]?>"
autocomplete="on" tabindex="1"/>
</div>
</div> -->
<!-- New code for Authorization with login/email -->
<div class="form-group fill-animate" data-sid="USER_LOGIN_OR_EMAIL">
<label class="font_14" for="USER_LOGIN_OR_EMAIL_POPUP<?=$rand?>">
<span>Введите логин или email<span class="required-star">*</span></span>
</label>
<div class="input">
<input type="text" name="USER_LOGIN_OR_EMAIL"
id="USER_LOGIN_OR_EMAIL_POPUP<?=$rand?>"
class="form-control required" maxlength="50"
value="" autocomplete="on" tabindex="1" placeholder='login или email'/>
</div>
</div> |
| Код |
|---|
if(
CModule::IncludeModule("security")
&& Mfa\Otp::isOtpRequired()
&& $_REQUEST["login_form"] <> "yes"
)
{
$arResult["FORM_TYPE"] = "otp";
$arResult["REMEMBER_OTP"] = (COption::GetOptionString('security', 'otp_allow_remember') === 'Y');
$arResult["CAPTCHA_CODE"] = false;
if(Mfa\Otp::isCaptchaRequired())
{
$arResult["CAPTCHA_CODE"] = $APPLICATION->CaptchaGetCode();
}
if(Mfa\Otp::isOtpRequiredByMandatory())
{
$arResult['ERROR_MESSAGE'] = array("MESSAGE" => GetMessage("system_auth_form_otp_required"), "TYPE" => "ERROR");
}
}
else
{
$arResult["FORM_TYPE"] = "login";
// КАСТОМИЗАЦИЯ --- ВСТАВЛЯЕМ ЛОГИКУ ПОДМЕНЫ ДАННЫХ ДЛЯ АВТОРИЗАЦИИ ПО EMAIL ИЛИ ЛОГИНУ ---
if(
$_SERVER["REQUEST_METHOD"] === "POST"
&& isset($_REQUEST["AUTH_FORM"]) && $_REQUEST["AUTH_FORM"] === "Y"
&& isset($_REQUEST["TYPE"]) && $_REQUEST["TYPE"] === "AUTH"
)
{
if(!empty($_POST["USER_LOGIN_OR_EMAIL"]))
{
$loginOrEmail = trim($_POST["USER_LOGIN_OR_EMAIL"]);
// Если строка формально похожа на email (проверка filter_var)
if(filter_var($loginOrEmail, FILTER_VALIDATE_EMAIL))
{
// Ищем пользователя по полю EMAIL
$rsUser = CUser::GetList(
($by = 'ID'),
($order = 'ASC'),
["=EMAIL" => $loginOrEmail]
);
if($arUser = $rsUser->Fetch())
{
// Подменяем стандартное поле, с которым работает Bitrix
$_POST["USER_LOGIN"] = $arUser["LOGIN"];
}
else
{
// Если не нашли по email, всё равно подставим исходное (пусть будет ошибка "Неверный логин/пароль")
$_POST["USER_LOGIN"] = $loginOrEmail;
}
}
else
{
// Иначе считаем, что это логин
$_POST["USER_LOGIN"] = $loginOrEmail;
}
}
}
// КОНЕЦ КАСТОМИЗАЦИИ
$arVarExcl = array("USER_LOGIN"=>1, "USER_PASSWORD"=>1, "backurl"=>1, "auth_service_id"=>1, "TYPE"=>1, "AUTH_FORM"=>1);
$arResult["GET"] = array();
$arResult["POST"] = array();
foreach($_POST as $vname=>$vvalue) { |
что еще надо кастомизировать для подобной работы авторизации?!
сейчас пишет Неверный логин или пароль - ну вывод (print_r($APPLICATION->arAuthResult)
говорит о том что неверный логин, значит он еще где-то проверяется, не найду где