Иногда бывают ситуации, когда пользователю можно регистрироваться на сайте без подтверждения, но для каких-то действий все же требуется подтверждение. Например, авторизоваться и купить в магазине можно без подтверждения, а вот написать на форуме - уже подтвердив электронный адрес. (кстати, стандартный компонент оформления заказа не будет автоматически регистрировать пользователя, если включена опция подтверждения, а данный модуль решает и эту задачу)
[spoiler]
Все решает новый модуль , который после модерации его на Маркете вы сможете скачать и установить бесплатно. Но несколько телодвижений все же потребуется.
1. Прежде всего, заведем новую группу пользователей, куда будут попадать только что зарегистрированные, но не подтвердившие email, пользователи. Отметим ее как группу для регистрации, и уберем оттуда вашу настоящую группу зарегистрированных

Заодно отключим опцию подтверждения по e-mail стандартную. Иначе предлагаемая схема не будет работать. Но вот сколько дней хранить неподтвердивших - эта опция будет использоваться (о ней ниже).
2. По идее, раз вы заинтересовались данным постом, у вас на сайте уже есть ряд сервисов или страниц, куда имеют доступ только зарегистрированные пользователи (это та группа, которую вы удалили из настроек в предыдущем пункте). Можно разрешить только этой группе писать в форум, или только этой группе заходить на ту или иную страницу. Допустим, мы создали

И закрыли доступ к ней всем, кроме зарегистрированных

Соответственно, все зарегистрированные только что, в нее не будут иметь доступы. Замечу, что до сих пор модуль вообще никак не используется. А вот дальше он помогает пользователям подтвердить свою регистрацию.
3. Создайте какую-либо страницу, куда разместите простой компонент модуля (у него нет настроек). Я создал страницу /auth/confirm.php

4. На эту страницу будут попадать пользователи по ссылке из письма с кодом подтвреждения. Теперь нам надо немного подправить шаблон этого самого письма. Находим "[ NEW_USER_CONFIRM ] == Подтверждение регистрации нового пользователя". И меняем его по своему усмотрению, но обязательно вписав ссылку на новую страницу подтверждения:
http://#SERVER_NAME#/auth/confirm.php?confirm_code=#CONFIRM_CODE#

5. Чуть не забыл, что после установки модуля вам надо будет пройти в его настройки и выставить их

Тут мы видим ту самую галочку для удаления пользователей, так и не подтвердивших регистрацию. Замечу, оттуда будут удаляться даже активные пользователи, будьте внимательны. Ну а вверху ставите нужные группы.
Понимаете, что произошло? Мы вынесли часть настроек главного модуля в отдельный и добавили новый шаг, который решает нашу задачу.
По идее, это все, только мелкая деталь. Представим сценарий - пользователь регистрируется, пытаясь добраться до определенного функционала, а ему опять форма аворизации! Как мол так - я уже и авторизован, что еще надо этому сайту? Знакомо?

Это решаемо! Но без кастомизации системного шаблона все же не обойтись. Копируем папку /bitrix/components/bitrix/system.auth.authorize/templates/.default в/ bitrix/templates/.default/components/bitrix/system.auth.authorize (ну, или вместо .default в папку сайта нужного). Затем открываем шаблон template.php и в самом верху пишем что-то типа такого:
Система смотрит, если пользователь находится в группе неподтвержденных, значит (с вероятностью 90%) он не подтвердил e-mail, и просит это сделать. Можно убрать return и написать что-то типа "либо войдите под другим логином".
В итоге получим вместо пугающего окна авторизации вполне дружелюбную форму:

Вот и все. Потренироваться можно .
[spoiler]
Все решает новый модуль , который после модерации его на Маркете вы сможете скачать и установить бесплатно. Но несколько телодвижений все же потребуется.
1. Прежде всего, заведем новую группу пользователей, куда будут попадать только что зарегистрированные, но не подтвердившие email, пользователи. Отметим ее как группу для регистрации, и уберем оттуда вашу настоящую группу зарегистрированных

Заодно отключим опцию подтверждения по e-mail стандартную. Иначе предлагаемая схема не будет работать. Но вот сколько дней хранить неподтвердивших - эта опция будет использоваться (о ней ниже).
2. По идее, раз вы заинтересовались данным постом, у вас на сайте уже есть ряд сервисов или страниц, куда имеют доступ только зарегистрированные пользователи (это та группа, которую вы удалили из настроек в предыдущем пункте). Можно разрешить только этой группе писать в форум, или только этой группе заходить на ту или иную страницу. Допустим, мы создали

И закрыли доступ к ней всем, кроме зарегистрированных

Соответственно, все зарегистрированные только что, в нее не будут иметь доступы. Замечу, что до сих пор модуль вообще никак не используется. А вот дальше он помогает пользователям подтвердить свою регистрацию.
3. Создайте какую-либо страницу, куда разместите простой компонент модуля (у него нет настроек). Я создал страницу /auth/confirm.php

4. На эту страницу будут попадать пользователи по ссылке из письма с кодом подтвреждения. Теперь нам надо немного подправить шаблон этого самого письма. Находим "[ NEW_USER_CONFIRM ] == Подтверждение регистрации нового пользователя". И меняем его по своему усмотрению, но обязательно вписав ссылку на новую страницу подтверждения:
http://#SERVER_NAME#/auth/confirm.php?confirm_code=#CONFIRM_CODE#

5. Чуть не забыл, что после установки модуля вам надо будет пройти в его настройки и выставить их

Тут мы видим ту самую галочку для удаления пользователей, так и не подтвердивших регистрацию. Замечу, оттуда будут удаляться даже активные пользователи, будьте внимательны. Ну а вверху ставите нужные группы.
Понимаете, что произошло? Мы вынесли часть настроек главного модуля в отдельный и добавили новый шаг, который решает нашу задачу.
По идее, это все, только мелкая деталь. Представим сценарий - пользователь регистрируется, пытаясь добраться до определенного функционала, а ему опять форма аворизации! Как мол так - я уже и авторизован, что еще надо этому сайту? Знакомо?


Это решаемо! Но без кастомизации системного шаблона все же не обойтись. Копируем папку /bitrix/components/bitrix/system.auth.authorize/templates/.default в/ bitrix/templates/.default/components/bitrix/system.auth.authorize (ну, или вместо .default в папку сайта нужного). Затем открываем шаблон template.php и в самом верху пишем что-то типа такого:
<?if (in_array(COption::GetOptionString('asd.confirmlater', 'later_group'), CUser::GetUserGroupArray())):?>
<?$APPLICATION->IncludeComponent("asd:asd.confirmlater");?>
<?return;?>
<?endif;?> |
Система смотрит, если пользователь находится в группе неподтвержденных, значит (с вероятностью 90%) он не подтвердил e-mail, и просит это сделать. Можно убрать return и написать что-то типа "либо войдите под другим логином".
В итоге получим вместо пугающего окна авторизации вполне дружелюбную форму:

Вот и все. Потренироваться можно .