Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 145 комментариев

Dmitry Elert
Dmitry Elert
Думаю, быстрее работа точно не пойдет.

Тут просто вопрос или нанимать программиста чтобы сделать сейчас или подождать.

Удобней было бы конечно дождаться из коробки, т.к. думаю что это и дешевле обойдется и надежней будет.

Поэтому и спросил.
Igor Ivanov
Igor Ivanov
Нашел решение. Надо выключить строгий режим работы MySQL (один из способов: в my.ini закомментить параметр sql_mode, ну или оставить его значение пустым. ). Тогда при вставки в поле типа DATETIME значения, выходящего за допустимый диапазон значений для данного типа данных, такого как 0, MySQL преобразует его в допустимое значение. В строгом же режиме работы MySQL просто выдает ошибку и прекращает операцию. На MODX Cloud база работает как раз в нестрогом режиме. Видимо и у тебя, Василий, тоже.
Василий Наумкин
Василий Наумкин
Очень просто: юзер инициализируется до загрузки страницы, на которой отрабатывает твой скрипт с авторизацией.

MODX — фреймворк, с определенной дефолтной логикой, в которой можно почти все изменить. Что ты и делаешь. Не думаю, что это недоработка — нельзя предусмотреть всё сразу.

Так что, твой код вполне нормальный, ничего не сломается. Если хочешь более красивого решения — можно унаследовать процессор и переписать, как тебе нужно.
Алексей Карташов
Алексей Карташов
Тогда по логике получается, что это не доработка системы? Или ошибка?
Почему бы юзера сразу не перезаписывать? У разработчиков были причины?
А если были, то есть вероятность, что при таком подходе что-то где-то может сломаться или сработать не так…

Но вообще, странное, на мой взгляд, поведение.
Алексей Карташов
Алексей Карташов
В общем, пока выход такой:
Чтобы данные о пользователе в системе были доступны сразу же после логина, надо просто перезаписывать $modx->user:
$modx->user = $user;
При логауте устанавливать в анонима:
$modx->user = $modx->getObject('modUser', 0);
Не знаю, на сколько правильный подход и что может сломаться при таком действии, но другого варианта я пока не вижу.

Если кто-то прочитает это после праздников и у него будут мысли по этому поводу — не стесняйтесь их здесь высказывать :-)
Алексей Карташов
Алексей Карташов
Так, на тестовом мой косяк, внутри функции loginUser забыл написать global $modx.

А вот по сабжу выяснилось вот что: юзер логинится, но это становится видно только после перезагрузки страницы.
Т.е. получается, что при
$modx->runProcessor('security/login', $data);
в $modx->user пользователь станет доступен не прям сразу после вызова процессора, а только при перезагрузке страницы. С логаутом та же картина.
Уже что-то, но всё-равно не годится :-(
Алексей Карташов
Алексей Карташов
Попробовал сейчас на тестовом воспроизвести, так там вообще система не даёт пользователя зарегистрировать — в лог падает ошибка:
User create error. Username: mail@example.com, Message: not_logged_in
Ну т.е. в лог ошибку-то я записываю, но вот not_logged_in (Не вошёл!) процессор отдаёт. И почему вот он её отдаёт?..
Igor Ivanov
Igor Ivanov
Спасибо, я верю и знаю что все будет ок. На MODX Cloud с первого раза все заработало. Но мне удобнее работать на локальной машине, хочу разобраться. Спасибо еще раз. Если ты не против, я буду сюда писать, если еще что обнаружу, ну и когда найду причину. Может еще кому пригодиться. Это не просьба о помощи лично к тебе, а так, мои 5 копеек в общую копилку. Может еще есть чудики на винде.