Strategius 52 08/28/2016 04:30 PM Добрый вечер!Подскажите, пожалуйста, возможно ли полностью отказаться от отдельной страницы входа на сайт, чтобы все происходило в стоковом всплывающем окне? Например, когда пользователь вводит неправильный пароль в окне входа, его перебрасывает на новую страницу по адресу site.ru/index.php?app=core&module=global§ion=login&do=process Как убрать эту страницу, чтобы ошибку выдавало с ajax-обновлением в этом же popup-окне? Share this post Link to post Share on other sites
siv1987 2,623 08/28/2016 06:23 PM Теоретически можно отправить авторизационные данные через 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> 1 Share this post Link to post Share on other sites
Strategius 52 08/28/2016 07:50 PM (edited) Добавил в шаблон inlineLogin этот скрипт, но теперь popup-окно входа вообще не всплывает после нажатия на кнопку входа, сразу перенаправляет на отдельную страницу...Upd. - Извиняюсь, все правильно работает! Спасибо огромное!! Именно то, что нужно! Edited August 28, 2016 by Strategius Share this post Link to post Share on other sites
Strategius 52 09/20/2016 07:03 PM Заметил, что с отдельного окна входа (site.ru/index.php?app=core&module=global§ion=login&do=process) после добавления модификации перестала работать переадресация на прошлую страницу. Например, до модификации при авторизации с того окна раньше происходила переадресация на предыдущую страницу, с которой мы попали на страницу входа. Теперь мы остаемся на странице авторизации, даже после входа... В чем проблема? Share this post Link to post Share on other sites
siv1987 2,623 09/21/2016 04:48 AM Нужно сделать исключение для формы с отдельной страницы авторизации. 1 Share this post Link to post Share on other sites
Strategius 52 09/21/2016 05:34 AM (edited) А как прописать страницу (ссылку) в исключение? Оно будет формироваться так примерно? if(ipb.vars['member_id']){ window.location.reload(); try { if ($this->settings['base_url']."app=core&module=global§ion=login"); window.location.assign(); } catch () { window.location.assign(); } finally { window.location.assign(); } } Edited September 21, 2016 by Strategius Share this post Link to post Share on other sites
siv1987 2,623 09/21/2016 08:09 AM if(window.location.search.indexOf('app=core&module=global§ion=login') == -1) $('login').onsubmit = function(e){ ... 1 Share this post Link to post Share on other sites
Strategius 52 09/21/2016 08:20 AM Спасибо Вам большое, работает! :) Share this post Link to post Share on other sites
Strategius 52 02/25/2017 10:51 AM Вылез баг - авторизация не работает, если пытаемся логиниться под забаненной учетной записью :( Share this post Link to post Share on other sites
newbie 1,721 02/25/2017 11:46 AM Вылез баг - авторизация не работает, если пытаемся логиниться под забаненной учетной записью Перед onSuccess: function(r) { добавить onFailure: function( t ) { // Тут пишите, что делать. Можете редиректить, можете посылать письмо почтой России. }, 1 Share this post Link to post Share on other sites
Strategius 52 02/25/2017 11:50 AM // Тут пишите, что делать. Можете редиректить, можете посылать письмо почтой России.А что нужно прописать, чтобы редиректило? Share this post Link to post Share on other sites
newbie 1,721 02/25/2017 11:57 AM А что нужно прописать, чтобы редиректило? Вот же у Вас в коде if(params['module'] == 'global' && ['register', 'login'].indexOf(params['section']) != -1){ window.location = ipb.vars['board_url']+'/'; } else{ window.location.reload(); }В первом случае редиректит на индексную страница, во втором - перезагружает страницу. 1 Share this post Link to post Share on other sites
Strategius 52 02/25/2017 12:00 PM Добавил, но все равно если логиниться забаненным, то ajax-авторизация не работает... Авторизовывается только после перезагрузки страницы. Share this post Link to post Share on other sites
newbie 1,721 02/25/2017 12:09 PM Добавил, но все равно если логиниться забаненным, то ajax-авторизация не работает... Авторизовывается только после перезагрузки страницы. Переменная params у Вас находится в другой части кода. Можете переместить var params = document.location.search.toQueryParams(); выше. Например, под var form 1 Share this post Link to post Share on other sites
Strategius 52 02/25/2017 12:16 PM Огромное спасибо, заработало! Share this post Link to post Share on other sites