Частая задача, пользователи не запоминают логины на сайтах, поэтому нужно регистрировать их по email или по номеру телефона. В последнем случае, можно сделать авторизацию по SMS, но это уже другая статья.
Задачу можно разделить на две части:
Скопируем шаблон '.default' компоненты system.auth.authorize в шаблон сайта и заменим в языковом файле шаблона /lang/ru/template.php 'Логин' на 'E-mail'.
Настроим авторизацию по E-mail, для этого в init.php добавим событие, которое перед авторизацией будет проверять значение по символу '@'. Если будет введен EMAIL то находим LOGIN и авторизуем пользователя по логину.
С авторизацией закончили, займемся регистрацией. Скопируем шаблон '.default' компонента system.auth.registration в шаблон сайта и удалим в нем поле ввода LOGIN.
Чтобы не появлялось ошибки типа - "Введите логин. Логин является обязательным полем", добавим в init.php событие, перед регистрацией заменяющее LOGIN на EMAIL".
Теги: Авторизация по email, Регистрация по email без логина, OnBeforeUserRegister, OnBeforeUserLogin
Задачу можно разделить на две части:
Авторизация по email.
Итак, начнем с авторизации.Скопируем шаблон '.default' компоненты system.auth.authorize в шаблон сайта и заменим в языковом файле шаблона /lang/ru/template.php 'Логин' на 'E-mail'.
Настроим авторизацию по E-mail, для этого в init.php добавим событие, которое перед авторизацией будет проверять значение по символу '@'. Если будет введен EMAIL то находим LOGIN и авторизуем пользователя по логину.
AddEventHandler("main", "OnBeforeUserLogin", "DoBeforeUserLoginHandler");
function DoBeforeUserLoginHandler(&$arFields)
{
$userLogin = $_POST["USER_LOGIN"];
if (isset($userLogin))
{
$isEmail = strpos($userLogin,"@");
if ($isEmail>0)
{
$arFilter = Array("EMAIL"=>$userLogin);
$rsUsers = CUser::GetList(($by="id"), ($order="desc"), $arFilter);
if($res = $rsUsers->Fetch())
{
if($res["EMAIL"]==$arFields["LOGIN"])
$arFields["LOGIN"] = $res["LOGIN"];
}
}
}
}
Регистрация по email без логина.
С авторизацией закончили, займемся регистрацией. Скопируем шаблон '.default' компонента system.auth.registration в шаблон сайта и удалим в нем поле ввода LOGIN.
Чтобы не появлялось ошибки типа - "Введите логин. Логин является обязательным полем", добавим в init.php событие, перед регистрацией заменяющее LOGIN на EMAIL".
AddEventHandler("main", "OnBeforeUserRegister", "OnBeforeUserRegisterHandler");
function OnBeforeUserRegisterHandler(&$args)
{
if(!empty($args['EMAIL']) && empty($args['LOGIN']))
{
$args['LOGIN'] = $args['EMAIL'];
}
return true;
}
Теги: Авторизация по email, Регистрация по email без логина, OnBeforeUserRegister, OnBeforeUserLogin