Мистика - перестаёт пускать в админку и не только
Всем привет!
Кто-нибудь сталкивался с тем, что при правильном логине и пароле перестаёт пускать в админку? И так же не логинит на фронте с теми же пользовательскими данными сниппетом Login.
Запара какая-то непонятная.
С фронта анонимусы создают объявления, при помощи Тикетс. Модераторы и администраторы могут входить по логину и паролю.
Ситуация такая: я, как член группы «Administrators» залогинен в админке, затем захожу с помощью сниппета Login на фронт — всё нормально. Потом с фронта делаю логаут (для своих проверок), захожу снова — всё, "Неправильное имя пользователя или пароль. Проверьте введённые данные и попытайтесь снова.". Затем из админки делаю «Перезагрузить права доступа» и «Завершить все сеансы», меня разлогивает, захожу снова — та же песня — "Неправильное имя пользователя или пароль. Проверьте введённые данные и попытайтесь снова.".
При чём, после возникновения этой ошибки на фронте, простой логаут из админки — и всё, не пускает.
Данные верные (заполняются из менеджера паролей).
Папку с кэшем, куки, таблицу сессий — всё чистил. Система последняя — 2.2.8. Хостинг менял, история не изменилась.
И это происходит не только с главным админом, а со всеми пользователями.
Помогает только принудительное изменение пароля напрямую в базе.
И вот сижу я сейчас без доступа в админку, ибо пароль постоянно менять тупо задолбало :-(
В общем мистика.
Кто-нибудь сталкивался с тем, что при правильном логине и пароле перестаёт пускать в админку? И так же не логинит на фронте с теми же пользовательскими данными сниппетом Login.
Запара какая-то непонятная.
С фронта анонимусы создают объявления, при помощи Тикетс. Модераторы и администраторы могут входить по логину и паролю.
Ситуация такая: я, как член группы «Administrators» залогинен в админке, затем захожу с помощью сниппета Login на фронт — всё нормально. Потом с фронта делаю логаут (для своих проверок), захожу снова — всё, "Неправильное имя пользователя или пароль. Проверьте введённые данные и попытайтесь снова.". Затем из админки делаю «Перезагрузить права доступа» и «Завершить все сеансы», меня разлогивает, захожу снова — та же песня — "Неправильное имя пользователя или пароль. Проверьте введённые данные и попытайтесь снова.".
При чём, после возникновения этой ошибки на фронте, простой логаут из админки — и всё, не пускает.
Данные верные (заполняются из менеджера паролей).
Папку с кэшем, куки, таблицу сессий — всё чистил. Система последняя — 2.2.8. Хостинг менял, история не изменилась.
И это происходит не только с главным админом, а со всеми пользователями.
Помогает только принудительное изменение пароля напрямую в базе.
И вот сижу я сейчас без доступа в админку, ибо пароль постоянно менять тупо задолбало :-(
В общем мистика.
Комментарии: 15
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
А если попробовать зайти прям из другого брайзура?
Ошибки в логах на сервере есть?
Php-apc или другой кэшер включен?
Пусто :-(
Вроде нет. Во всяком случае с кэшем не игрался и все настройки кэша по умолчанию из коробки.
Сейчас вообще жесть какая-то — после последней попытки логина через Login тупо перестала отображаться форма входа. Вот вообще нету. Папку с кэшем чистил несколько раз (мало ли). Раньше такого не было.
Спасибо вам!
В форме добавления нового тикета, кроме, собственно, полей тикета, так же есть поля для редактирования данных пользователя. И если пользователь залогинен, то данные автоматом подставляются в эти поля. Если не залогинен, то их надо вписать и юзер автоматом создастся и залогинится. Так вот при добавлении тикета поля пользователя обрабатываются отдельно — если надо — юзер создаётся, если что-то изменилось — юзер обновляется.
Так вот обновление юзера происходило вот так:
И фишка вышла такая — благодаря $user->toArray() в процессор передаётся так же поле текущего пароля. А точнее не сам пароль, а его хэш (в базе же пароли хешированные лежат). А процессор, получив заполненное поле пароля, делал из него новый хэш и его записывал. Соответственно, пароль-то фактически каждый раз менялся. Вот такой вот я балда :-)
Изначально я считал, что в процессор достаточно передать id-шник юзера и поля, которые надо изменить. А оказалось, что нифига — этому процессору обязательно нужны ещё логин и мыло (которое надо тянуть из профайла). Поэтому решил перебдеть, собрав все данные в кучу. И зря, как выяснилось)
Переделал на это и всё заработало:
Василий, я не зря отвечаю в этой ветке именно тебе, потому что в процессе копания выяснилась интересная особенность тикетов, возможно даже баг.
Помнишь, ты мне как-то помогал разобраться с изменением алиасов при создании тикетов? К алиасу добаляется id тикета в плагине на «OnDocFormSave» вот так:
У меня в сниппете myTicketForm в самом конце, после всех шаманств и отработки всех процессоров, идёт редирект на этот тикет:
И вот в чём дело — редирект происходит на uri со старым алиасом, т.е. на тот, который был до моих изменений! Хотя все плагины отработали и всё должно было измениться. Но и это не самое интересное — у самого тикета алиас сохранился таким, каким я его и сделал, с id-шником! Т.е. makeUrl берёт uri документа из какого-нибудь alias_map, а там данные ещё старые. В итоге редирект происходит на не существующий адрес. Но и это ещё не всё — страница открывается! xD
Т.е., положим у тикета сформировался такой алиас — 'this-is-ticket-alias'. В плагине к нему подставляется id тикета: '123-this-is-ticket-alias'. И этот алиас фактически у ресурса и записан, но в кэше лежит 'this-is-ticket-alias', и при редиректе на этот адрес открывается только что созданный тикет (хотя адрес-то фактически не существующий)!
И вот только после того, как в админке что-нибудь изменю/сохраню или просто тыкну «обновить сайт» — кэш очищается и по адресу 'this-is-ticket-alias' как и положено вылезает 404, а сам документ становится доступен по '123-this-is-ticket-alias'.
Такие дела.
В процессе копания пришёл к вот этому.
Заменил код метода на:
Не помогло.
Потом заменил на одну строчку:
И всё встало на свои места, всё заработало как надо. Только вот теперь чистится весь кэш сайта, а собственная система кэширования тикетов получается не при делах :-(
Выходит проблема именно в кэшировании тикетов. Точнее в очистке кэша.
Как-то так.
Вот этот момент в процессоре.
А в OnDocFormSave известен id, но не обновляется карта алиасов. Как ж мне быть?