Как сделать повторную отправку ссылки активации

Всем приветствия!
Возник, казалось бы, закономерный вопрос: Как реализовать возможность пользователю делать запрос на повторную (автоматическую) отправку письма с ссылкой на активацию его аккаунта?

Практически на всех сайтах, разработанных на Modx, процедура регистрации пользователя выглядит следующим образом:
1) Пользователь регистрируется на сайте.
2) На его email, который он указал при регистрации отправляется письмо с ссылкой активации аккаунта. Как правило, эта ссылка действительна 3 часа.
3) Пользователь открывает письмо, кликает по активационной ссылке и успешно активирует свой аккаунт.
Но
Но что ему делать, если он, по какой-то причине не получил письмо или же, например, не уложился в 3 часа и активационная ссылка потеряла свою волшебную силу?!
Ведь, в базе данных его профиль не активирован. И если даже он попробует зайти в раздел восстановления пароля (я использую компонент Login, а в данном случае его сниппет ForgotPassword), то указав свой логин или email ему на почту придет письмо с новым паролем и активационной ссылкой, но нажав на эту активационную ссылку он не активирует свой аккаунт, а лишь активирует новый пароль…
Конечно же можно в общей форме сообщить будущим пользователям, чтоб в случае чего обращались к администратору сайта и т.д., но это же не вариант! Особенно, если пользователей сотни да и вообще, не правильно это…

Итак, если подвести итог, вопрос звучит так:
Как реализовать страницу «Повторный запрос на отправку письма активации аккаунта» с формой, где пользователь может ввести свой email и нажав на кнопку «Отправить запрос», получит свою долгожданную ссылку на активацию? Желательно, чтоб можно было делать такой запрос на конкретный email раз в 3 часа.

Перерыл весь гугл, ничего не нашел, даже на зарубежных сообществах.
Среди не актуальных ответов поисковика, нашел топик с практически аналогичным вопросом:
http://forums.modx.com/thread/86110/activate-user-who-didn-t-click-on-registration-activation-link-before-expiry-limit

а так же наткнулся на вот эту страницу сайта, где это реализовано именно так, как надо:
http://do.pstu.ru/login/confirmmail.php

В общем, повторюсь, в других сообществах ничего конкретного нет. Надеюсь в этом сообществе под оправданно амбициозным названием «Крупнейшее русскоязычное MODX сообщество» найдутся ответы…

Ребята помогите! Ведь это же нужно практически всем сайтам, на которых реализована регистрация пользователей. Особенно для тех сайтов на Modx, которые использовали для этого всем известный компонент Login.

P.S.
В стандартном чанке «lgnExpiredTpl» компонента Login, содержится такой код:
<p><strong>Password Reset Information</strong></p>
<p>Your password has already been reset or the link expired. If you need to reset your password again, click <a href="#">here</a>.</p>
То есть, получается, что Login как бы дает намек, что это вполне реализуемо его силами… Хотя это всего лишь мои догадки…
Сuriosity
04 октября 2015, 18:28
modx.pro
4 069
0

Комментарии: 14

SaLacoste
04 октября 2015, 23:32
0
Как костыль, можно увеличить время ттл
activationttl	Number of minutes until the activation email expires. Defaults to 3 hours.
Так же посмотрите
rtfm.modx.com/extras/revo/login/login.confirmregister
    Сuriosity
    05 октября 2015, 01:56
    0
    Конечно же, я читал эту скудную документацию по Login…

    То что Вы мне ответили, как я понимаю, это не то.

    Сниппет «ConfirmRegister» – это обработчик. Когда пользователь кликает по активационной ссылке, то он приходит на страницу, где стоит этот ConfirmRegister. После чего ConfirmRegister решает правильная это активационная ссылка или нет. Если правильная, то сниппет активирует аккаунт пользователя.

    Вот смотрите:
    1) Страница регистрации

    [[!Register?
        &submitVar=`registerbtn`
        &activationEmailTpl=`lgnActivateEmailTpl`
        &activationEmailSubject=`Спасибо за регистрацию!`
        &usergroups=`users`
        &submittedResourceId=`6`
        &activationResourceId=`7`
    	&validate=`nospam:blank,
    	username:required:minLength=^3^:maxLength=^20^,
    	fullname:required:minLength=^1^:maxLength=^30^,
    	email:required:email,
    	password:required:minLength=^8^:maxLength=^30^,
    	password_confirm:password_confirm=^password^`
    	&placeholderPrefix=`reg.`
    ]]
    
    
    <form action="[[~[[*id]]]]" method="post">
    	<input type="hidden" name="nospam" value="[[!+reg.nospam]]">
    	<input type="text" name="username" id="username" value="[[!+reg.username]]">
    	<input type="text" name="fullname" id="fullname" value="[[!+reg.fullname]]">
    	<input type="text" name="email" id="email" placeholder="yourmail@site.com" value="[[!+reg.email]]">
    	<input type="password" name="password" id="password" placeholder="Пароль" value="[[!+reg.password]]">
    	<input type="password" name="password_confirm" id="password_confirm" placeholder="Повторить пароль" value="[[!+reg.password_confirm]]">
    	<input type="submit" name="registerbtn" value="Зарегестрироваться">
    </form>
    Где:

    &activationEmailTpl — шаблон с письмом, которое отправится после удачной отправки формы регистрации. Именно в этом письме и будет активационная ссылка.
    &submittedResourceId — страница, на которую перенаправит после удачной отправки формы регистрации. Здесь пишем что-то типа: На ваш email отправлено письмо ссылкой…
    &activationResourceId — а вот, собственно, страница, на которой находится сниппет «ConfirmRegister». Именно на эту страницу перенаправит та самая ссылка, которую будущий пользователь кликнет в своем письме.

    2) Страница 7 содержит:

    [[!ConfirmRegister?
    	&redirectTo=`11`
    	&errorPage=`2`
    ]]
    Где:
    &redirectTo — страница, на которую перенаправит сниппет ConfirmRegister. И перенаправит туда только в том случае, если сниппет ConfirmRegister одобрил активационную ссылку.
    &errorPage — здесь указан ID страницы, кторая является 404. Тоесть, для тех, кто зашел на активационную страницу(7) не по активационной ссылке, а напрямую — увидят 404 ошибку.

    Так вот, меня же интересует:
    Как реализовать страницу «Повторный запрос на отправку письма активации аккаунта» с формой, где пользователь может ввести свой email и нажав на кнопку «Отправить запрос», получит свою долгожданную ссылку на активацию? Желательно, чтоб можно было делать такой запрос на конкретный email раз в 3 часа.
    Если совсем коротко, то: Как создать активационную ссылку?..
    Но, все же, хотелось бы узнать как реализовать форму с двух инпутов (логин и кнопка), которая будет отправлять на указанный email (если он существует в базе) письмо с активационной ссылкой, но не более одного раза в 3 часа.
    Василий Наумкин
    05 октября 2015, 03:30
    0
    Активационную ссылку просто так не создать. Для этого нужно как бы сбросить пароль заново, сохранить его еще на 3 часа и отправить уже ссылку, по которой он будет активирован.

    Компонент Office делает так из коробки. Если пытается войти неактивированный юзер — он получает новое письмо со ссылкой на активацию.
      Сuriosity
      13 октября 2015, 01:53
      0
      Василий, спасибо!

      Активационную ссылку просто так не создать.
      Я так понял, что если просто так не создать, значит необходимо создать не про сто так…
      Через несколько дней придется за деньги просить кого-то из сообщества создать такой компонент.
      Уверен, что он понадобится не только мне да и не только в странах СНГ.
      Да и разместив его на главном репозитории и на modstore.pro, увеличится популяризация как этого сообщества, так и MODX в целом.

      P.S.
      Приношу извинения за столь поздний ответ. Уезжал, не было возможности…

      P.P.S.
      По вашему компоненту Tickets тоже будет не мало «хотелок», не сложных, но важных. Сейчас, пока, собираю их в кучу, скоро буду к Вам стучаться!
        Василий Наумкин
        13 октября 2015, 03:44
        0
        Через несколько дней придется за деньги просить кого-то из сообщества создать такой компонент.
        Компонент Office делает так из коробки и умеет еще много чего дополнительно.

        Не знаю, зачем нужно писать новый компонент.

        Да и разместив его на главном репозитории и на modstore.pro, увеличится популяризация как этого сообщества, так и MODX в целом.
        Нет, не увеличится, проверено много раз.

        По вашему компоненту Tickets тоже будет не мало «хотелок», не сложных, но важных. Сейчас, пока, собираю их в кучу, скоро буду к Вам стучаться!
        Вряд ли я чем-то смогу помочь, у меня работа расписана до следующего года.
          Волков Николай
          01 декабря 2015, 06:54
          0
          Через несколько дней придется за деньги просить кого-то из сообщества создать такой компонент.
          Сразу вспомнилось причина закрытия исходников на Github и кое-каких народных умельцев:-)
        Максим
        01 декабря 2015, 06:24
        0
        Здравствуйте, Василий подскажите если письмо на активацию не пришло, как мне получить его повторно? Если попытаться войти то пишет вы не подтвердили пользователя, если повторно регистрироваться то пишет такой пользователь уже есть в систему
          Василий Наумкин
          01 декабря 2015, 06:44
          0
          В последних версиях Office, если пытаться зайти неактивированным юзером, то отправляется повторная ссылка на активацию. Но не чаще чем раз в 30 минут.

          Как у других дополнений — не знаю.
            Максим
            01 декабря 2015, 06:48
            0
            Забыл уточнить, да именно про Office спросил. А время это как то сократить можно? к примеру до 10 минут
              Василий Наумкин
              01 декабря 2015, 06:57
              0
              Параметр &linkTTL у сниппета OfficeAuth, в секундах.

              По умолчанию как раз 10 минут, проверил.
                Максим
                01 декабря 2015, 07:00
                0
                Хорошо спасибо
            Волков Николай
            01 декабря 2015, 06:47
            0
            Черным по белому же написано, при чем в самом первом комментарии…
              Максим
              01 декабря 2015, 06:50
              0
              Черным по белому написано про Login, а меня интересует Office
            Дмитрий
            07 августа 2017, 04:09
            0
            С точки зрения разработчика — действие очевидно.
            С точки зрения юзабилити — нет.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            14