Не работает авторизация и/или регистрация на сайте, часть 2

Снова простое решение иногда возникающей проблемы.

Думаю, что нужно по-умолчанию добавить в .htaccess редирект с домена с «www.» на без него т.к. если сайт был сконфигурирован (в конфиге записано) без указания «www», то при заходе пользователем на сайт с префиксом «www.», и, например, авторизации, посылается запрос на домен без «www» (т.к. в JS-массиве роутера запись для урлов аякса указывает на домен без «ввв», которая взята с конфига, естественно) т.е. фактически на другой домен, а политика безопасности браузера не разрешает такой кросс доменный запрос и блокирует его. В итоге для пользователя все выглядит весьма простым образом:



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

Ему дают стандартный ответ — смотри логи и/или ответ Firebug.

Интересно и то, что может быть обратно пропорциональная ситуация: в конфиге сайт записан с «www», а пользователь открыл сайт без указания устаревшего префикса. И снова аякс не сработает.

Мало уловимый «баг» (если, конечно, его таковым можно вообще назвать) — много частых вопросов.

Поэтому, веб-мастера, которые выращивают ЛС у себя на сайтах, делайте редирект на тот домен, который у вас прописан в конфиге:

$config['path']['root']['web'] = 'http://site.com';


А как это сделать — уже писалось ранее:

Итак ЛС желательно размещать на домене без «www», т.к. он уж очень не любит этого — авторизация на сайте будет выполнятся либо на «www» либо на «без www», поэтому пользователи будут периодически слать вам (админу) письма о невозможности входа на сайт или периодического разлогинивания. Будьте бдительны — выключите дедушку «www» сразу.

Пожалуй, самый лучший вариант сделать это посредством модуля mod_rewrite вашего сервера, дописав в конец файла .htaccess, который находится в корне вашего сайта следующие строки:
RewriteCond %{HTTP_HOST} ^www.САЙТ.com [NC]
RewriteRule ^(.*)$ http://САЙТ.com/$1 [L,R=301]

где САЙТ — имя вашего сайта.

В каталоге модулей для Ливстрит есть плагин который делает тоже самое, но с точки зрения скорости работы (и затраты ресурсов сервера) — это не рационально.

Это кросспост из гида по лс.

UPD: Добавил пример:
AddDefaultCharset UTF-8
Options -Indexes
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php
# Alternative rule
#RewriteRule ^(.*)$ /index.php

<Files "plugins.dat">
order allow,deny
deny from all
</Files>

<Files ~ "\.tpl$">
Order allow,deny
Deny from all
</Files>

#MOD by PSNet

<Files "plugin.xml">
order allow,deny
deny from all
</Files>

RewriteCond %{HTTP_HOST} ^www.livestreetguide.com [NC]
RewriteRule ^(.*)$ http://livestreetguide.com/$1 [L,R=301]


UPD2: Код редиректа нужно вставлять сразу после директивы
RewriteEngine On

т.к. в противном случае он не на всех страницах делал корректный редирект
Наша команда seo4usa.net предлагает качественное продвижение англоязычных сайтов. Раскрутите свой сайт на новом рынке!

42 комментария

avatar
Я столкнулся с подобной проблемой на 1.0.3, но она была что с www, что без.
Решил проблему путем правки classes/modules/user/User.class.php, строка 1251
if (preg_match('/^[' . $charset . ']{' . $min . ',' . $max . '}$/i',$sLogin)){

заменил ее на:
if (preg_match('/^[a-zA-Z0-9]{3,30}$/i',$sLogin)){
avatar
ваша проблема тоже решена и описана «почему так случилось» здесь.
avatar
еще есть баг с openid.
например, если авторизация через gmail с почты vasya.pupkin@gmail.com
в логине есть точка, поэтому дефолтовый паттерн не пропускает его
Я всегда добавляю в паттерн еще и точку
avatar
напишите тикет автору
avatar
так дело не в плагине, а в валидации логина. Изначально в конфиге точка не предусмотрена
avatar
тогда тикет на гитхабе)
avatar
Проблемы с использованием почтового ящика на mail.ru, не приходят подтверждения при регистрации и смене пароля. Другие почтовики работают нормально (пробовал Яндекс и Рамблер). Год назад уже сталкивался с подобным, но чудесным образом удалось всё исправить.
avatar
все зависит от настроек сервера, на котором установлен ЛС
avatar
Надо обратиться в службу поддержки хостера?
avatar
нет, заголовки для писем можно настроить только если у вас свой сервер. Думаю, Gmugra сможет более точно ответить на этот вопрос, либо уже ответил в одном из его топиков по настройке.
avatar
PSNet спасибо за статьи, вчера только столкнулся с подобной проблемой, а тут Ваша статья :), решился вопрос с добавлением в файл .htaccess
avatar
Приятно читать что кому-то это действительно нужно)
avatar
Можете подробнее написать кокой файл править и полный текст с исправлениями.

У меня в корне сайта нет файла .htaccess
На денвере нашел .htaccess с кодом
AddDefaultCharset UTF-8
Options -Indexes
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php
# Alternative rule
#RewriteRule ^(.*)$ /index.php

<Files "plugins.dat">
order allow,deny
deny from all
</Files>


мне нужно подправить этот файл и добавить в корень сайта?

в конфиге прописано
$config['path']['root']['web']        = 'http://'.$_SERVER['HTTP_HOST']; 
avatar
вам нужно найти указанную строчку только в конфиг.локал.пхп, а потом добавить код из статьи в конец корневого htaccess (тот, код которого вы указали выше)
avatar
Спасибо большое!
Файл .htaccess почему то не отображается по FTP я его якобы добавил и заработало!
avatar
Файл .htaccess почему то не отображается по FTP
Потому-что он скрыт.

Алсо. А в таком случае ещё стоит учесть один момент. Точка в конце домена — прощай рабочая авторизация. ;)
avatar
а именно?..
avatar
http://livestreet.ru./
avatar
трудно ответить полностью?..
avatar
А вам мало описано? Какого ответа вы ожидаете? Я думаю тут всё достаточно описано. Откуда она там будет — вопрос другой. Почему войти с таким образом на ресурс возможно — вопрос третий.
avatar
Какого ответа вы ожидаете?
полного. если вы видите ошибку, но не хотите о ней сообщить — это как минимум странно.
avatar
«Это не ошибка, это фича.». :)
вы видите ошибку, но не хотите о ней сообщить
Странный вы, об «ошибке» я вроде сообщил.
Или вы хотите чтобы я вам пересказал стандарты RFC касательно DNS, URL etc?
Так и быть. Точка в конце доменного имени указывает, что это FQDN. Если точки нет — значит имя относительное. Далее RFC указывает, что хост может быть только fqdn/ip, и больше ничего.
RFC 1034, 3.5 оглашает более подробное правило определения имени хоста, но о точке там ничего нет.
Браузеры позволяют зайти на сайт как с точкой, так и без неё.
Если клиент «откуда-то-там» придёт с таким хостом, и полезет в авторизацию, или ещё там куда — может огрести проблем, если мы не предусмотрим правило.
Как исправить? В nginx я предусмотрел у себя — простой if, в котором если происходит соответствие, клиенту отправляется 301 и редирект на правильное доменное имя. В apache, скорей всего тоже с реврайтами играть. Проверенного правила для апача не скажу, т.к у меня тупо нет где протестировать. А ставить только для этого — как-то не хочу.
avatar
Почему-то редиректит не все страницы правильно.
Так, например, страницу блогов www.site.by/blogs/ перекидывает на site.by/index.php/,
а страницу блога www.site.by/blog/blogname/ перенаправляет на site.by/index.php/blogname/
avatar
добавил пример в статью.
avatar
Хм, все так, но проблема есть. На Вашем сайте она тоже присутствует, если к адресу статьи добавить www, например.
avatar
хм. действительно. что-то недосмотрел…
avatar
перебирал разные варианты, в том числе и тот, который на прошлых версиях движка работал — проблема остается, может что-то изменилось в этом плане на уровне движка?
avatar
нет, ничего не менялось. наверное не досмотрел. надо подумать как теперь нормально соединить два реврайта в кучу.
avatar
на прошлых версиях движка у меня такая конструкция работала (не знаю, на сколько сильно она отличается):

RewriteCond %{HTTP_HOST} ^www\.site\.by$ [NC]
RewriteRule ^(.*)$ http://site.by/$1 [L,R=301]


Сейчас и с ней проблемы описанные выше.
avatar
это та же конструкция, но т.к. лс имеет ещё свое правило, то они объединяются и получается «кака». позже поищу решение.
avatar
avatar
Первое не то было)
livestreet.ru/blog/16131.html
avatar
Я очередной товарищ, у которого сломался логин. Но в моем случае www в домене нет, хотя и реврайты я тоже на всякий случай попробовал — не помогло.

Если, кто-то из гуру поможет, буду благодарен:
livestreet.ru/blog/questions/15999.html
avatar
Шаблон Street Spirit
Активные плагины: aceAdminPanel, AutoOpenID, Block content, Config Engine, Main preview topic, Static page, SEO, Simple template, Sitemap
С главной страницы Не работает кнопка «Войти». С любой другой страницы работает.

при отключении aceAdminPanel работает.
  • fill
  • 0
avatar
сами спросили — сами ответили. в топике есть информация по решению одного из вариантов проблемы, вы пробовали?
avatar
нету тут упоминаний за aceAdminPanel, а проблема действительно в нем, т.к. когда он включен ни в каком шаблоне нету входа. Хотел в лог апача глянуть, но даже никаких попыток запросов нету.
Естественно пробовал так в .htaccess
AddDefaultCharset UTF-8
Options -Indexes
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php
# Alternative rule
#RewriteRule ^(.*)$ /index.php

<Files "plugins.dat">
order allow,deny
deny from all
</Files>

<Files ~ "\.tpl$">
Order allow,deny
Deny from all
</Files>

#MOD by PSNet

<Files "plugin.xml">
order allow,deny
deny from all
</Files>

RewriteCond %{HTTP_HOST} ^www.имя.домена [NC]
RewriteRule ^(.*)$ http://имя.домена/$1 [L,R=301]


только Options -MultiViews, когда Options -Indexes (ошибка 404)не работают подпункты «Новые», «Обсуждаемые»,«Топ».
Хотя в целом и Options -Indexes ставил, одинаково.

далее конфиг локал $config['path']['root']['web'] = 'http://имя.юдомена';
просто конфиг $config['path']['root']['web'] = 'http://'.$_SERVER['HTTP_HOST'];
avatar
<RewriteCond %{HTTP_HOST} ^www.имя.домена [NC]
RewriteRule ^(.*)$ http://имя.домена/$1 [L,R=301]/code>
пробовал и вниз и после RewriteEngine On
avatar
в отладчике браузера что пишет при загрузке главной страницы? там явно жс ошибки есть
avatar
Да, это уже ближе к решению проблемы
Имеется ошибка в каком ява скрипте:
Uncaught TypeError: $(...).on is not a function

На страницах где вход работает и при отключенном aceAdminPanel ее действительно нету.
Какой то имя.домена/templates/cache/ls-theme_street-spirit-master/de4a8a0b46d7797de30dcfc78111431e.js
Так понимаю это какой то кэш шаблона, попробовал удалить, создалось само по новой.
Ошибка в последней строке:
if($.cookie(id))$('#'+id).collapse('show');});});var nav_containers=$('.fix-on-container');nav_containers.each(function(index){var container=$(this);var navbar=container.find('.navbar.fix-on-bottom').first();container.waypoint({handler:function(event,direction){navbar.toggleClass('sticky-bottom',direction=='up');},offset:'bottom-in-view'});navbar.css('width',navbar.width());if($.waypoints('viewportHeight')+$('body').scrollTop()<navbar.offset().top-navbar.height()){navbar.addClass('sticky-bottom');}});$('tr.selectable td.checkbox input[type=checkbox]').on('click',function(event){if($(this).prop('checked')){$(this).parents('tr').first().addClass('info');}else{$(this).parents('tr').first().removeClass('info');}});aceAdmin.nativeUiCompatible();aceAdmin.inputFileStyle();if($.fn.tooltip)$('[rel="tooltip"]').tooltip();});var $ace=aceAdmin||{};

Сейчас конечно погуглю. Но в целом, логически, раз этот файл сам создается ошибка где то в другом месте.
avatar
при отключении aceAdminPanel работает.
нету тут упоминаний за aceAdminPanel, а проблема действительно в нем
по сути с самого начала можно было сказать что это решение. через поиск можете найти сотни других проблем, которые вызывает эта адмика, ею вообще не рекомендуется пользоваться.
avatar
Да, как то даже живее работает сайт.
По сути согласен, все можно настроить через конфиг, а у плагинов настройки и так остаются.
avatar
Да, как то даже живее работает сайт.
и это тоже.
у той админки много багов, поэтому если есть возможность отказаться — сделайте это
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.