Полный цикл в digital

Настраиваемая регистрация - main.register

Возможности системного компонента регистрации довольно скромные: нет возможности добавить свои поля, сделать их обязательными для заполнения. Для реализации таких возможностей есть компонент «Настраиваемая регистрация», который позволяет настроить и разместить на сайте свою форму регистрации. В визуальном редакторе компонент расположен по пути: Служебные -> Пользователь -> Настраиваемая регистрация.

В настройках главного модуля должна стоять галка "Позволять регистрироваться самостоятельно" и выбрана группа для регистрации!

Пример вызова компонента:

<?
// Настраиваемая регистрация
$APPLICATION->IncludeComponent(     
"bitrix:main.register",
"",
array(
// Автоматически авторизовать пользователей
"AUTH" => "Y",   
// Поля, обязательные для заполнения		
"REQUIRED_FIELDS" => array( 
0 => "EMAIL",
1 => "NAME",
2 => "LAST_NAME",
),
// Устанавливать заголовок страницы
"SET_TITLE" => "Y",  
// Поля, которые показывать в форме		
"SHOW_FIELDS" => array(     
0 => "EMAIL",
1 => "NAME",
2 => "LAST_NAME",
),
// Страница окончания регистрации
"SUCCESS_PAGE" => "",  
// Показывать дополнительные свойства		
"USER_PROPERTY" => "",      
// Название блока пользовательских свойств
"USER_PROPERTY_NAME" => "", 
// Отправлять пользователя по обратной ссылке
"USE_BACKURL" => "N",       
),
false
);

Создадим страницу /auth/register.php, разместим на ней вызов компонента «Настраиваемая регистрация». В настройках компонента выберем поля, которые надо показывать:

  • [EMAIL] E-mail
  • [NAME] Имя
  • [LAST_NAME] Фамилия
  • [PERSONAL_PHONE] Телефон
  • [WORK_COMPANY] Наименование компании
  • [WORK_PHONE] Телефон (рабочий)

И укажем поля, обязательные для заполнения:

  • [EMAIL] E-mail
  • [NAME] Имя
  • [LAST_NAME] Фамилия
  • [PERSONAL_PHONE] Телефон

После этого страница /auth/register.php содержит следующий код:

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Регистрация");
?>
<?
$APPLICATION->IncludeComponent(
"bitrix:main.register",
".default",
array(
"AUTH" => "N",
"COMPONENT_TEMPLATE" => ".default",
"REQUIRED_FIELDS" => array(
0=>"EMAIL",
1=>"NAME",
2=>"LAST_NAME",
3=>"PERSONAL_PHONE",
),
"SET_TITLE" => "Y",
"SHOW_FIELDS" => array(
0=>"EMAIL",
1=>"NAME",
2=>"LAST_NAME",
3=>"PERSONAL_PHONE",
4=>"WORK_COMPANY",
5=>"WORK_PHONE",
),
"SUCCESS_PAGE" => "/auth/",
"USER_PROPERTY" => array(),
"USER_PROPERTY_NAME" => "",
"USE_BACKURL" => "N"
)
);
?>
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>

Теперь нам надо кастомизировать форму регистрации под наш дизайн. Для этого копируем шаблон компонента:

  • Откуда: bitrix/components/bitrix/main.register/templates/.default
  • Куда: local/templates/название_сайта/components/bitrix/main.register/.default

После внесения изменений получилось так:

<?
/*
* Файл local/templates/название_сайта/components/bitrix/main.register/.default/template.php
*/
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
?>
<? if ($USER->IsAuthorized()): /* если пользователь уже авторизован */ ?>
<p><?= GetMessage('MAIN_REGISTER_REG_AUTH'); /* Вы зарегистрированы и авторизованы */ ?></p>
<? return ?>
<? endif; ?>
<div class="bitrix-main-register">
<h2><?= GetMessage('MAIN_REGISTER_FORM_TITLE'); /* заголовок формы */ ?></h2>
<? if (count($arResult["ERRORS"]) > 0): /* сообщения об ошибках при заполнении формы */ ?>
<?
foreach ($arResult["ERRORS"] as $key => $error) {
if (intval($key) == 0 && $key !== 0) {
$arResult["ERRORS"][$key] = str_replace(
"#FIELD_NAME#",
'«'.GetMessage('MAIN_REGISTER_'.$key).'»',
$error
);
}
}
ShowError(implode("<br />", $arResult["ERRORS"]));
?>
<? elseif ($arResult["USE_EMAIL_CONFIRMATION"] === "Y"): ?>
<p><?= GetMessage('MAIN_REGISTER_EMAIL_HELP'); /* будет отправлено письмо для подтверждения */ ?></p>
<? endif; ?>
<form method="post" action="<?= POST_FORM_ACTION_URI; ?>" name="regform" enctype="multipart/form-data">
<? if ($arResult["BACKURL"] <> ''): ?>
<input type="hidden" name="backurl" value="<?= $arResult["BACKURL"]; ?>" />
<? endif; ?>
<? foreach ($arResult["SHOW_FIELDS"] as $FIELD): ?>
<? if ($FIELD == "AUTO_TIME_ZONE" && $arResult["TIME_ZONE_ENABLED"]): /* часовой пояс */ ?>
<!-- код удален -->
<? continue; ?>
<? endif; ?>
<div>
<span>
<?= GetMessage('MAIN_REGISTER_'.$FIELD); /* очередное поле */ ?> 
<? if ($arResult["REQUIRED_FIELDS_FLAGS"][$FIELD] == "Y"): ?> 
<i>*</i> <!-- поле обязательно для заполнения -->
<? endif; ?>
</span>
<span>
<? if ($FIELD == "PASSWORD"): /* пароль */ ?>
<input type="password" name="REGISTER[<?= $FIELD; ?>]" value="<?= $arResult["VALUES"][$FIELD]; ?>" autocomplete="off" />
<? if ($arResult["SECURE_AUTH"]): /* безопасная авторизация */ ?>
<!-- код удален -->
<? endif; ?>
<? elseif ($FIELD == "CONFIRM_PASSWORD"): /* подтверждение пароля */ ?>
<input type="password" name="REGISTER[<?= $FIELD; ?>]" value="<?= $arResult["VALUES"][$FIELD]; ?>" autocomplete="off" />
<? elseif ($FIELD == "PERSONAL_GENDER"): /* пол: мужской, женский */ ?>
<select name="REGISTER[<?= $FIELD; ?>]">
<option value="">
<?= GetMessage('MAIN_REGISTER_USER_UNKNOWN'); ?>
</option>
<option value="M"<?= $arResult["VALUES"][$FIELD] == 'M' ? ' selected="selected"' : ''; ?>>
<?= GetMessage('MAIN_REGISTER_USER_MALE'); ?>
</option>
<option value="F"<?= $arResult["VALUES"][$FIELD] == 'F' ? ' selected="selected"' : ''; ?>>
<?= GetMessage('MAIN_REGISTER_USER_FEMALE'); ?>
</option>
</select>
<? elseif (in_array($FIELD, array("PERSONAL_COUNTRY", "WORK_COUNTRY"))): /* страна проживания или работы */ ?>
<select name="REGISTER[<?= $FIELD; ?>]">
<? foreach ($arResult["COUNTRIES"]["reference_id"] as $key => $value): ?>
<?
$selected = ($value == $arResult["VALUES"][$FIELD]) ? ' selected="selected"' : '';
?>
<option value="<?= $value; ?>"<?= $selected; ?>>
<?= $arResult["COUNTRIES"]["reference"][$key]; ?>
</option>
<? endforeach; ?>
</select>
<? elseif (in_array($FIELD, array("PERSONAL_PHOTO", "WORK_LOGO"))): /* личное фото */ ?>
<input type="file" name="REGISTER_FILES_<?= $FIELD; ?>" />
<? elseif (in_array($FIELD, array("PERSONAL_NOTES", "WORK_NOTES"))): ?>
<textarea name="REGISTER[<?= $FIELD; ?>]">
<?= $arResult["VALUES"][$FIELD]; ?>
</textarea>
<? elseif ($FIELD == "PERSONAL_BIRTHDAY"): /* дата рождения */ ?>
<small><?= $arResult["DATE_FORMAT"]; ?></small><br />
<input size="30" type="text" name="REGISTER[<?= $FIELD; ?>]" value="<?= $arResult["VALUES"][$FIELD]; ?>" />
<?
$APPLICATION->IncludeComponent(
'bitrix:main.calendar',
'',
array(
'SHOW_INPUT' => 'N',
'FORM_NAME' => 'regform',
'INPUT_NAME' => 'REGISTER[PERSONAL_BIRTHDAY]',
'SHOW_TIME' => 'N'
),
null,
array("HIDE_ICONS"=>"Y")
);
?>
<? else: ?>
<input type="text" name="REGISTER[<?= $FIELD; ?>]" value="<?= $arResult["VALUES"][$FIELD]; ?>" />
<? endif; ?>
</span>
</div>
<? endforeach; ?>
<? /***** User properties *****/ ?>
<? if($arResult["USER_PROPERTIES"]["SHOW"] == "Y"): ?>
<h3><?= empty($arParams["USER_PROPERTY_NAME"]) ? GetMessage("USER_TYPE_EDIT_TAB") : $arParams["USER_PROPERTY_NAME"]; ?></h3>
<? foreach ($arResult["USER_PROPERTIES"]["DATA"] as $FIELD_NAME => $arUserField): ?>
<div>
<span>
<?= $arUserField["EDIT_FORM_LABEL"]; ?>
<? if ($arUserField["MANDATORY"]=="Y"): ?>
<i>*</i> <!-- поле обязательно для заполнения -->
<? endif; ?>
</span>
<span>
<?
$APPLICATION->IncludeComponent(
"bitrix:system.field.edit",
$arUserField["USER_TYPE"]["USER_TYPE_ID"],
array(
"bVarsFromForm" => $arResult["bVarsFromForm"],
"arUserField" => $arUserField,
"form_name" => "regform"
),
null,
array("HIDE_ICONS"=>"Y")
);
?>
</span>
</div>
<? endforeach; ?>
<? endif; ?>
<? /***** User properties *****/ ?>
<? if ($arResult["USE_CAPTCHA"] == "Y"): /* использовать CAPTCHA? */ ?>
<div class="captcha">
<h3><?= GetMessage('MAIN_REGISTER_CAPTCHA_TITLE'); ?></h3>
<input type="hidden" name="captcha_sid" value="<?= $arResult["CAPTCHA_CODE"]; ?>" />
<img src="/bitrix/tools/captcha.php?captcha_sid=<?= $arResult["CAPTCHA_CODE"]; ?>" width="180" height="40" alt="CAPTCHA" />
<span><?= GetMessage('MAIN_REGISTER_CAPTCHA_HELP'); ?> <i>*</i></span>
<span><input type="text" name="captcha_word" maxlength="50" value="" /></span>
</div>
<? endif; ?>
<div class="submit">
<input type="submit" name="register_submit_button" value="<?= GetMessage('MAIN_REGISTER_FORM_SUBMIT'); /* кнопка отправки формы */ ?>" />
</div>
</form>
<p><?= $arResult["GROUP_POLICY"]["PASSWORD_REQUIREMENTS"]; /* предупреждение о min длине пароля */?></p>
<p><i>*</i> <?= GetMessage('MAIN_REGISTER_REQUIRED'); /* Эти поля обязательны для заполнения */ ?></p>
</div>
<?
/*
* Файл local/templates/название_сайта/components/bitrix/main.register/.default/lang/ru/template.php
*/
$MESS['MAIN_REGISTER_FORM_TITLE']          = 'Регистрация';
$MESS['MAIN_REGISTER_REG_AUTH']            = 'Вы зарегистрированы и успешно авторизованы.';
$MESS['MAIN_REGISTER_EMAIL_HELP']          = 'На указанный в форме e-mail придет запрос на подтверждение регистрации.';
$MESS['MAIN_REGISTER_LOGIN']               = 'Логин';
$MESS['MAIN_REGISTER_EMAIL']               = 'E-mail';
$MESS['MAIN_REGISTER_PASSWORD']            = 'Пароль';
$MESS['MAIN_REGISTER_CONFIRM_PASSWORD']    = 'Подтверждение пароля';
$MESS['MAIN_REGISTER_NAME']                = 'Имя';
$MESS['MAIN_REGISTER_SECOND_NAME']         = 'Отчество';
$MESS['MAIN_REGISTER_LAST_NAME']           = 'Фамилия';
$MESS['MAIN_REGISTER_TITLE']               = 'Обращение';
$MESS['MAIN_REGISTER_USER_UNKNOWN']        = 'Нет данных';
$MESS['MAIN_REGISTER_USER_MALE']           = 'Мужской';
$MESS['MAIN_REGISTER_USER_FEMALE']         = 'Женский';
$MESS['MAIN_REGISTER_PERSONAL_PROFESSION'] = 'Профессия';
$MESS['MAIN_REGISTER_PERSONAL_WWW']        = 'WWW-страница';
$MESS['MAIN_REGISTER_PERSONAL_ICQ']        = 'ICQ';
$MESS['MAIN_REGISTER_PERSONAL_GENDER']     = 'Пол';
$MESS['MAIN_REGISTER_PERSONAL_BIRTHDAY']   = 'Дата рождения';
$MESS['MAIN_REGISTER_PERSONAL_PHOTO']      = 'Фотография';
$MESS['MAIN_REGISTER_PERSONAL_PHONE']      = 'Телефон';
$MESS['MAIN_REGISTER_PERSONAL_FAX']        = 'Факс';
$MESS['MAIN_REGISTER_PERSONAL_MOBILE']     = 'Мобильный';
$MESS['MAIN_REGISTER_PERSONAL_PAGER']      = 'Пейджер';
$MESS['MAIN_REGISTER_PERSONAL_STREET']     = 'Улица, дом';
$MESS['MAIN_REGISTER_PERSONAL_MAILBOX']    = 'Почтовый ящик';
$MESS['MAIN_REGISTER_PERSONAL_CITY']       = 'Город';
$MESS['MAIN_REGISTER_PERSONAL_STATE']      = 'Область / край';
$MESS['MAIN_REGISTER_PERSONAL_ZIP']        = 'Почтовый индекс';
$MESS['MAIN_REGISTER_PERSONAL_COUNTRY']    = 'Страна';
$MESS['MAIN_REGISTER_PERSONAL_NOTES']      = 'Дополнительные заметки';
$MESS['MAIN_REGISTER_WORK_COMPANY']        = 'Наименование компании';
$MESS['MAIN_REGISTER_WORK_DEPARTMENT']     = 'Департамент / Отдел';
$MESS['MAIN_REGISTER_WORK_POSITION']       = 'Должность';
$MESS['MAIN_REGISTER_WORK_WWW']            = 'WWW-страница (работа)';
$MESS['MAIN_REGISTER_WORK_PHONE']          = 'Телефон (работа)';
$MESS['MAIN_REGISTER_WORK_FAX']            = 'Факс (работа)';
$MESS['MAIN_REGISTER_WORK_PAGER']          = 'Пейджер (работа)';
$MESS['MAIN_REGISTER_WORK_STREET']         = 'Улица, дом (работа)';
$MESS['MAIN_REGISTER_WORK_MAILBOX']        = 'Почтовый ящик (работа)';
$MESS['MAIN_REGISTER_WORK_CITY']           = 'Город (работа)';
$MESS['MAIN_REGISTER_WORK_STATE']          = 'Область / край (работа)';
$MESS['MAIN_REGISTER_WORK_ZIP']            = 'Почтовый индекс (работа)';
$MESS['MAIN_REGISTER_WORK_COUNTRY']        = 'Страна (работа)';
$MESS['MAIN_REGISTER_WORK_PROFILE']        = 'Направления деятельности';
$MESS['MAIN_REGISTER_WORK_LOGO']           = 'Логотип компании';
$MESS['MAIN_REGISTER_WORK_NOTES']          = 'Дополнительные заметки (работа)';
$MESS['MAIN_REGISTER_FORM_SUBMIT']         = 'Зарегистрироваться';
$MESS['MAIN_REGISTER_CAPTCHA_TITLE']       = 'Защита от автоматической регистрации';
$MESS['MAIN_REGISTER_CAPTCHA_HELP']        = 'Введите символы с картинки';
$MESS['MAIN_REGISTER_REQUIRED']            = 'Эти поля обязательны для заполнения';
<?
/*
* Файл local/templates/название_сайта/components/bitrix/main.register/.default/lang/ru/component.php
*/
$MESS['REGISTER_WRONG_CAPTCHA']            = 'Неверно введено слово с картинки';
$MESS['REGISTER_FIELD_REQUIRED']           = 'Поле #FIELD_NAME# обязательно для заполнения';
$MESS['REGISTER_DEFAULT_TITLE']            = 'Регистрация нового пользователя';
$MESS['REGISTER_USER_WITH_EMAIL_EXIST']    = 'Пользователь с таким e-mail (#EMAIL#) уже существует';
$MESS['main_register_sess_expired']        = 'Ваша сессия истекла, повторите попытку регистрации';
$MESS['main_register_decode_err']          = 'Ошибка при дешифровании пароля (#ERRCODE#)';
/*
* Файл local/templates/название_сайта/components/bitrix/main.register/.default/style.css
*/
.bitrix-main-register {
}
.bitrix-main-register > p {
margin: 1em 0;
}
.bitrix-main-register > p > a {
text-decoration: underline;
}
.bitrix-main-register > form {
overflow: hidden;
}
.bitrix-main-register > form > div {
width: 50%;
margin-bottom: 15px;
float: left;
box-sizing: border-box;
}
.bitrix-main-register > form > div.captcha {
border: 1px solid #ccc;
padding: 20px 15px 15px 15px;
position: relative;
margin-top: 15px;
width: 49%;
clear: both;
}
.bitrix-main-register > form > div.captcha > h3 {
position: absolute;
top: -10px;
font-weight: normal;
font-size: 16px;
background: #eee;
padding: 0 10px;
color: #999;
}
.bitrix-main-register > form > div.captcha > span:first-of-type {
margin-top: 10px;
}
.bitrix-main-register > form > div:nth-of-type(even) {
padding-left: 1%;
}
.bitrix-main-register > form > div:nth-of-type(odd) {
padding-right: 1%;
}
.bitrix-main-register > form > div > span {
display: block;
}
.bitrix-main-register > form > div > span:first-child {
margin-bottom: 5px;
}
.bitrix-main-register > form > div > span > input[type="text"],
.bitrix-main-register > form > div > span > input[type="password"],
.bitrix-main-register > form > div > span > select,
.bitrix-main-register > form > div > span > textarea {
width: 100%;
padding: 5px;
border:1px solid #ccc;
}
.bitrix-main-register > form > div.submit {
float: none;
padding-left: 0;
}
.bitrix-main-register > form > div.submit > input[type="submit"] {
width: 30%;
padding: 5px;
background: #333;
color: #fff;
border: none;
margin-top: 10px;
}
.bitrix-main-register i {
font-style: normal;
font-weight: bold;
color: #f00;
}

Тут есть еще один важный момент. Что будет, если на эту страницу попадает авторизованный пользователь? Ему показывается малоинформативное сообщение, что он зарегистрирован и авторизован:

<? if ($USER->IsAuthorized()): /* если пользователь уже авторизован */ ?>
<p><?= GetMessage('MAIN_REGISTER_REG_AUTH'); /* Вы зарегистрированы и авторизованы */ ?></p>
<? return ?>
<? endif; ?>

Есть смысл перенаправить его на страницу личного кабинета или на страницу профиля:

<? if ($USER->IsAuthorized()): /* если пользователь уже авторизован, ему здесь делать нечего */ ?>
<? LocalRedirect('/auth/profile.php'); ?>
<? endif; ?>

Пользовательские поля

Хотя Битрикс предлагает большой набор предопределенных полей, их все-таки может не хватить. Тогда остается только создавать свои поля. Это можно сделать в панели управления: Настройки -> Настройки продукта -> Пользовательские поля:

Я добавил тестовое поле Мое поле, тип Строка, в настройках компонента указал, что это поле надо показывать:

Порядок полей

Для настройки порядка следования полей в форме, создадим файл result_modifier.php:

<?php
/*
  * Файл local/templates/название_сайта/components/bitrix/main.register/.default/result_modifier.php
  */
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
// меняем порядок следования полей
$arResult['SHOW_FIELDS'] = array(
    'NAME',
    'LAST_NAME',
    'LOGIN',
    'EMAIL',
    'PASSWORD',
    'CONFIRM_PASSWORD',
    'WORK_COMPANY',
    'WORK_PHONE',
    'PERSONAL_PHONE',
);

Авторизация по E-mail

Давайте уберем поле LOGIN, как отживший свое пережиток прошлого. Без этого поля регистрацию пользователь не пройдет, поэтому будем создавать LOGIN из EMAIL. Добавляем в init.php следующий код:

AddEventHandler("main", "OnBeforeUserRegister", "OnBeforeUserUpdateHandler");
AddEventHandler("main", "OnBeforeUserUpdate", "OnBeforeUserUpdateHandler");
function OnBeforeUserUpdateHandler(&$arFields) {
$arFields["LOGIN"] = $arFields["EMAIL"];
return $arFields;
}

Чтобы форма регистрации не выдавала ошибок «Не заполнено обязательное поле логин», внесем изменение в шаблон компонента:

<? if ($FIELD == 'LOGIN'): /* логин */ ?>
<input type="text" name="REGISTER[<?= $FIELD; ?>]" value="<?= uniqid('user_'); ?>" />
<? elseif ($FIELD == "PASSWORD"): /* пароль */ ?>
<!-- код пропущен -->
<? elseif ($FIELD == "CONFIRM_PASSWORD"): /* подтверждение пароля */ ?>
<!-- код пропущен -->
<? endif; ?>

Еще раз изменим порядок следования полей в форме и сделаем поле LOGIN первым, чтобы можно было его скрыть, обратившись с помощью :first-of-type:

<?
/*
* Файл local/templates/название_сайта/components/bitrix/main.register/.default/result_modifier.php
*/
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
// меняем порядок следования полей
$arResult['SHOW_FIELDS'] = array(
  'LOGIN',
  'NAME',
  'LAST_NAME',
  'EMAIL',
  'PERSONAL_PHONE',
  'PASSWORD',
  'CONFIRM_PASSWORD',
  'WORK_COMPANY',
  'WORK_PHONE',
);

Теперь скроем поле LOGIN:

/*
* Файл local/templates/название_сайта/components/bitrix/main.register/.default/style.css
*/
.bitrix-main-register {
}
/* код пропущен */
.bitrix-main-register > form > div:first-of-type {
display: none;
}
/* код пропущен */
.bitrix-main-register > form > div:nth-of-type(even) {
padding-right: 1%;
}
.bitrix-main-register > form > div:nth-of-type(odd) {
padding-left: 1%;
}
/* код пропущен */

Но есть еще одна проблема — у нас теперь две формы регистрации с разным составом полей:

  1. первая формируется системным компонентом system.auth.registration и доступна по адресу /auth/?register=yes
  2. вторая формируется компонентом bitrix:main.register и доступна по адресу /auth/register.php

Давайте исправим, удалим весь код из шаблона компонента system.auth.registration, и поместим в него вызов компонента bitrix:main.register из файла /auth/register.php:

<?
/*
* Файл local/templates/название_сайта/components/bitrix/system.auth.registration/.default/template.php
*/
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
$APPLICATION->IncludeComponent(
"bitrix:main.register",
".default",
array(
"AUTH" => "N",
"REQUIRED_FIELDS" => array(
0 => "EMAIL",
1 => "NAME",
2 => "LAST_NAME",
3 => "PERSONAL_PHONE",
),
"SET_TITLE" => "Y",
"SHOW_FIELDS" => array(
0 => "EMAIL",
1 => "NAME",
2 => "LAST_NAME",
3 => "PERSONAL_PHONE",
4 => "WORK_COMPANY",
5 => "WORK_PHONE",
),
"SUCCESS_PAGE" => "/auth/",
"USER_PROPERTY" => array(
),
"USER_PROPERTY_NAME" => "",
"USE_BACKURL" => "N",
"COMPONENT_TEMPLATE" => ".default"
),
false
);

А файл /auth/register.php просто удалим. Можно еще удалить лишний код из шаблона компонента bitrix:main.register, который никогда не будет выполнен. Системный компонент system.auth.registration вызывается где-то глубоко в недрах Битрикс только в том случае, если пользователь не авторизован. И еще одна проверка в шаблоне «Пользователь авторизован?» просто не нужна.

<?
/*
* Файл local/templates/название_сайта/components/bitrix/main.register/.default/template.php
*/
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
?>
<!-- следующие три строчки можно удалить -->
<? if ($USER->IsAuthorized()): /* если пользователь уже авторизован, ему здесь делать нечего */ ?>
<? LocalRedirect('/auth/profile.php'); ?>
<? endif; ?>

Не забываем изменить другие системные компоненты:

<?
/*
* Файл local/templates/название_сайта/components/bitrix/system.auth.authorize/.default/lang/ru/template.php
*/
$MESS['SYS_AUTH_AUTHORIZE_TITLE']         = 'Авторизация';
// теперь e-mail используется как логин
$MESS['SYS_AUTH_AUTHORIZE_LOGIN']         = 'E-mail';
$MESS['SYS_AUTH_AUTHORIZE_PASSWORD']      = 'Пароль';
$MESS['SYS_AUTH_AUTHORIZE_REMEMBER']      = 'Запомнить меня';
$MESS['SYS_AUTH_AUTHORIZE_CAPTCHA_TITLE'] = 'Защита от автоматической регистрации';
$MESS['SYS_AUTH_AUTHORIZE_CAPTCHA_TEXT']  = 'Введите символы с картинки';
$MESS['SYS_AUTH_AUTHORIZE_SUBMIT']        = 'Войти';
$MESS['SYS_AUTH_AUTHORIZE_REG_USER']      = 'Зарегистрироваться';
$MESS['SYS_AUTH_AUTHORIZE_FORGOT']        = 'Забыли пароль?';
<?
/*
* Файл local/templates/название_сайта/components/bitrix/system.auth.forgotpasswd/.default/lang/ru/template.php
*/
$MESS['SYS_AUTH_FORGOT_TITLE']        = 'Восстановление пароля';
// теперь восстановление пароля только по e-mail
$MESS['SYS_AUTH_FORGOT_HELP']         = 'Введите Ваш E-mail: инструкция по смене пароля будет отправлена на этот почтовый адрес.';
$MESS['SYS_AUTH_FORGOT_LOGIN']        = 'Логин';
$MESS['SYS_AUTH_FORGOT_EMAIL']        = 'E-mail';
$MESS['SYS_AUTH_FORGOT_CAPTHA_TITLE'] = 'Защита от автоматической регистрации';
$MESS['SYS_AUTH_FORGOT_CAPTHA_TEXT']  = 'Введите символы с картинки';
$MESS['SYS_AUTH_FORGOT_SUBMIT']       = 'Отправить';
$MESS['SYS_AUTH_FORGOT_AUTH']         = 'Авторизация';
<?
/*
* Файл local/templates/название_сайта/components/bitrix/system.auth.forgotpasswd/.default/template.php
*/
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
?>
<!-- логин больше не нужен, удаляем или комментируем код ниже -->
<!--
<div>
<span>
<?= GetMessage('SYS_AUTH_FORGOT_LOGIN'); /* логин пользователя */ ?>
</span>
<span>
<input type="text" name="USER_LOGIN" maxlength="50" value="<?= $arResult["LAST_LOGIN"]; ?>" />
</span>
</div>
-->
<?
/*
* Файл local/templates/название_сайта/components/bitrix/system.auth.changepasswd/.default/lang/ru/template.php
*/
$MESS['SYS_AUTH_CHANGE_TITLE']         = 'Смена пароля';
// теперь e-mail используется как логин
$MESS['SYS_AUTH_CHANGE_LOGIN']         = 'E-mail';
$MESS['SYS_AUTH_CHANGE_CHECK']         = 'Контрольная строка';
$MESS['SYS_AUTH_CHANGE_PASSWORD']      = 'Новый пароль';
$MESS['SYS_AUTH_CHANGE_CONFIRM']       = 'Подтверждение пароля';
$MESS['SYS_AUTH_CHANGE_CAPTCHA_TITLE'] = 'Защита от автоматической регистрации';
$MESS['SYS_AUTH_CHANGE_CAPTCHA_TEXT']  = 'Введите символы с картинки';
$MESS['SYS_AUTH_CHANGE_SUBMIT']        = 'Изменить пароль';
$MESS['SYS_AUTH_CHANGE_AUTH']          = 'Авторизация';
$MESS['SYS_AUTH_CHANGE_REQUIRED']      = 'Эти поля обязательны для заполнения';

Есть еще один момент, о котором есть смысл упомянуть. Если при изменении пароля не заполнить поле «E-mail», появляется сообщение об ошибке "Логин должен быть не менее 3 символов". Где это изменить, я не нашел, видимо где-то в недрах ядра Битрикс. Поэтому небольшой хак:

<?
/*
* Файл local/templates/название_сайта/components/bitrix/system.auth.changepasswd/.default/template.php
*/
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
?>
<div class="system-auth-changepasswd">
<h2><?= GetMessage('SYS_AUTH_CHANGE_TITLE'); /* заголовок формы */ ?></h2>
<?
// небольшй хак, который убирает сообщение о длине логина
if (isset($arParams['AUTH_RESULT']['TYPE'])
&& $arParams['AUTH_RESULT']['TYPE'] == 'ERROR'
&& false !== iconv_strpos($arParams['AUTH_RESULT']['MESSAGE'], 'Логин должен быть')) {
$arParams['~AUTH_RESULT']['MESSAGE'] = 'Недопустимое значение поля «E-mail»';
}
?>
<p><? ShowMessage($arParams["~AUTH_RESULT"]); /* сообщение о результате смены пароля */ ?></p>
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг