Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Подтверждение регистрации пользователя

00 голосов
6
Есть задача: после регистрации пользователь должен полноценно пользоваться сайтом, но в течении какогото времени, после чего он деактивируется(удаление не подходит т.к. он может осуществить покупку). Если он подтвердит по email-у тогда конечно он может пользоваться сайтом без ограничений времени.

Попытался сделать следующим образом - выставил опцию "Запрашивать подтверждение регистрации по E-mail". И перехватываю событие OnBeforeUserRegister, где ставлю $arFields["ACTIVE"] = 'Y'. После чего пользователь становится зарегистрированным и в его профиле есть CONFIRM_CODE. Дальше всё просто - делаю агент который деактивирует пользователя, у которого есть CONFIRM_CODE и дата регистрации больше определенного времени. 

Но есть проблема с подтверждением - когда пользователь переходит по ссылки из письма - то видит надпись "Регистрация пользователя уже подтверждена." Это не то развитие событий, которое необходимо. В коде компонента подтверждения проверяется только устанолен ли $arFields["ACTIVE"] в значение Y и никак не затрагивает CONFIRM_CODE, который в свою очередь должен быть удален после этой операции.

Теперь вопрос - как сделать правильно подтверждение? Где можно перехватить выполнение компонента system.auth.confirmation который использует ядро битрикса?

Спасибо.
спросил 14 Май, 13 от Gurevi4 (320 баллов)

6 Ответы

00 голосов
Кажется вы немного углубились не туда, вы можете задавать вхождение пользователя в группу в диапазоне времени, а доступ к определенным функциям и разделам давать по условию вхождения в группу.

Например дать возможность делать покупки только определенной группе, а время вхождение в группу задавать при регистрации, и продлевать при нужных вам обстоятельствах.
ответил 14 Май, 13 от Niola (360 баллов)
00 голосов
Цитата
Dios пишет:
Кажется вы немного углубились не туда, вы можете задавать вхождение пользователя в группу в диапазоне времени, а доступ к определенным функциям и разделам давать по условию вхождения в группу.

Например дать возможность делать покупки только определенной группе, а время вхождение в группу задавать при регистрации, и продлевать при нужных вам обстоятельствах.
это тоже не решит главного - как узнать что пользователь подтвердил свою регистрацию? ведь сначала пользователь зарегистрируется, выставится ему активность в 'Y' и перейдет в нужную группу, а при переходе по ссылке из письма - он увидит тоже сообщение что я привел в вопросе - битрикс посчитает что подтверждение уже было и не обнулит CONFIRM_CODE из свойств пользователя - я никак не узнаю стоит ли удалять пользователя из группы или нет.
ответил 15 Май, 13 от Gurevi4 (320 баллов)
00 голосов
Попробуйте перефразировать задачу, я все еще не пойму целиком.

Если вы хотите деактивацию пользователей не подтвердивших email по истечению определенного срока то:

Делаете обработчик события "OnAfterUserRegister", в обработчике добавляете вхождение в группу с временным интервалом, то есть сроком до подтверждения почты.

Код на вскидку



Код
$fields = array(
   "GROUP_ID" => array(
      array(
         ["GROUP_ID"] => 1,
         ["DATE_ACTIVE_FROM"] => "01.08.2012", // Активность от
         ["DATE_ACTIVE_TO"] => "01.08.2012" // Активность до
      ),
      array(
         ["GROUP_ID"] => 2
         ["DATE_ACTIVE_TO"] => "01.09.2012" // Можно использовать активность до без от
      )
   )
);
$user->Update(USER_ID, $fields);




Дату вычисляете (Текущая + Нужный срок)

В почтовом шаблоне меняете ссылку на подтверждение регистрации на свою, которая ссылается на новый раздел\страницу.
В которой вы пишите пхп код снимающий временные ограничения на вхождение в группу.

Пока что такие мысли... подумаю еще... Теоретически распространенная практика в инете, должно быть типовое-простое решение.
ответил 26 Июль, 13 от Niola (360 баллов)
00 голосов
попробую еще раз объяснить:
пользователь активен заданное время, либо если подтверждает регистрацию безграничное время.

что мы имеем в битриксе:

опция "Запрашивать подтверждение регистрации по E-mail" делает следующее - при регистарции пользователь не активный и не может зайти на сайт и только после подтверждения аквтивизируется.

опция "Сколько дней хранить пользователей с неподтвержденной регистрацией" удаляет пользователя после заданного времени если он не подтвердил активацию.


поэтому стандартные варианты мне не подходят. И в моем алгоритме всё работает кроме подтверждения.

Цитата
Dios пишет:
В почтовом шаблоне меняете ссылку на подтверждение регистрации на свою, которая ссылается на новый раздел\страницу.
В которой вы пишите пхп код снимающий временные ограничения на вхождение в группу.
В точку smile:) Вот этот вариант я совсем упустил из виду, зациклился на стандартных инструментах. Спасибо smile:)
ответил 28 Окт, 13 от Gurevi4 (320 баллов)
00 голосов
Активность пользователя дает или блокирует авторизацию.
Вхождение в группу дает или забирает права на доступ к разделам, функциям, услугам.

Удалять акки, сомнительное радикальное решение, на аккаунты вешается много связанной инфы за время активности, смотря какой у вас сайт. Удаляя аккаунты, нужно чистить их деятельность, например удалить их заказы. Я бы просто дезактивировал бы... чистил бы акки только неактивные больше 2х лет, например.




У вас задачи, как я вижу
1. Разрешить авторизацию пользователя сразу -> Отключение типовой проверки почты и активация аккаунта сразу.
2. Ограничить функционал временными рамками -> Вхождение в группу в диапазоне времени, выдача прав на функционал группе.
3. Снять ограничение времени по подтверждению почтового адреса -> Разработка своего механизма подтверждения почты.
4. Удаление левых аккаунтов без подтверждения почты -> Агент с зачисткой.



Думаю, должно существовать типовое решение для такой политики, без стадий разработки. 

Маркетплейс и Идеи уже глянули?
ответил 01 Фев, 14 от Niola (360 баллов)
00 голосов
Цитата
Dios пишет:
Маркетплейс и Идеи уже глянули?
смотрел, но что-то подходящего не нашел, в любом случае мне самому реализовать решение не проблема - главное последовательность действий знать наверняка.
ответил 22 Май, 14 от Gurevi4 (320 баллов)

Похожие вопросы

0 голосов
2 ответов
спросил 22 Апр, 14 от fbdf (140 баллов)
0 голосов
4 ответов
спросил 19 Янв, 14 от Lapulay (100 баллов)
0 голосов
6 ответов
спросил 28 Авг, 13 от Lisica (900 баллов)
0 голосов
9 ответов
спросил 21 Май, 13 от Kania (5,180 баллов)
+1 голос
2 ответов