Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Strategius

Окно входа без перезагрузки

Рекомендованные сообщения

Добрый вечер!

Подскажите, пожалуйста, возможно ли полностью отказаться от отдельной страницы входа на сайт, чтобы все происходило в стоковом всплывающем окне?

 

Например, когда пользователь вводит неправильный пароль в окне входа, его перебрасывает на новую страницу по адресу site.ru/index.php?app=core&module=global&section=login&do=process

 

Как убрать эту страницу, чтобы ошибку выдавало с ajax-обновлением в этом же popup-окне?

Поделиться сообщением


Ссылка на сообщение

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

 

После формы авторизации () в globalTemplate > inlineLogin добавить скрипт

 

<script>
$$('#inline_login_form #login')[0].observe('submit', function(e){
   e.preventDefault();
   var form = this;
   new Ajax.Request(form.action, {
       method: 'post',
       parameters: this.serialize(true),
       onSuccess: function(r) {
           var div = document.createElement('div');
           div.innerHTML = r.responseText;
           var script = div.select('script:contains("member_id")')[0];
           if(script){
               var toEval = script.innerHTML.replace('Loader.boot();', '');
               eval(toEval);
               if(ipb.vars['member_id']){
                   var params = document.location.search.toQueryParams();
                   if(params['module'] == 'global' && ['register', 'login'].indexOf(params['section']) != -1){
                       window.location = ipb.vars['board_url']+'/';
                   }
                   else{
                       window.location.reload();
                   }
               }
               else{
                   var error = form.select('p.error.message')[0];
                   if(!error){
                       form.select('div.ipsForm fieldset')[0].insert({
                           before: '<p class="error message" style="margin-bottom:10px;"></p>'
                       });
                       error = form.select('p.error.message')[0];
                   }
                   var p = div.select('p.error.message')[0];
                   error.innerHTML = p ? p.innerHTML : 'Authentication error';
               }
           }
           else{
               window.location.href = form.action;
           }
       }
   });
   return false;
});
</script>

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
08/28/16 19:50 (изменено)

Добавил в шаблон inlineLogin этот скрипт, но теперь popup-окно входа вообще не всплывает после нажатия на кнопку входа, сразу перенаправляет на отдельную страницу...

Upd. - Извиняюсь, все правильно работает! Спасибо огромное!! Именно то, что нужно!

Изменено пользователем Strategius

Поделиться сообщением


Ссылка на сообщение

Заметил, что с отдельного окна входа (site.ru/index.php?app=core&module=global&section=login&do=process) после добавления модификации перестала работать переадресация на прошлую страницу. Например, до модификации при авторизации с того окна раньше происходила переадресация на предыдущую страницу, с которой мы попали на страницу входа. Теперь мы остаемся на странице авторизации, даже после входа... В чем проблема?

Поделиться сообщением


Ссылка на сообщение

Нужно сделать исключение для формы с отдельной страницы авторизации.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
09/21/16 05:34 (изменено)

А как прописать страницу (ссылку) в исключение? Оно будет формироваться так примерно?

 

if(ipb.vars['member_id']){
                   window.location.reload();
				try {
                   if ($this->settings['base_url']."app=core&module=global&section=login");
                   window.location.assign();
                   }
                   catch () {
                   window.location.assign();
                   }
                   finally {
                   window.location.assign();
                   }
               }

Изменено пользователем Strategius

Поделиться сообщением


Ссылка на сообщение
if(window.location.search.indexOf('app=core&module=global&section=login') == -1)
$('login').onsubmit = function(e){
...

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Спасибо Вам большое, работает! :)

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

Вылез баг - авторизация не работает, если пытаемся логиниться под забаненной учетной записью

 

Перед

        onSuccess: function(r) {

добавить

	onFailure: function( t )
{
              // Тут пишите, что делать. Можете редиректить, можете посылать письмо почтой России.
},

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

// Тут пишите, что делать. Можете редиректить, можете посылать письмо почтой России.

А что нужно прописать, чтобы редиректило?

Поделиться сообщением


Ссылка на сообщение

А что нужно прописать, чтобы редиректило?

 

Вот же у Вас в коде

                    if(params['module'] == 'global' && ['register', 'login'].indexOf(params['section']) != -1){
                       window.location = ipb.vars['board_url']+'/';
                   }
                   else{
                       window.location.reload();
                   }

В первом случае редиректит на индексную страница, во втором - перезагружает страницу.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Добавил, но все равно если логиниться забаненным, то ajax-авторизация не работает... Авторизовывается только после перезагрузки страницы.

Поделиться сообщением


Ссылка на сообщение

Добавил, но все равно если логиниться забаненным, то ajax-авторизация не работает... Авторизовывается только после перезагрузки страницы.

Переменная params у Вас находится в другой части кода. Можете переместить

                    var params = document.location.search.toQueryParams();

выше. Например, под var form

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Огромное спасибо, заработало!

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...