Я использую модифицированную версию компонентов SimpleAuth/SimpleAcl от Felix Geisendörfer, которые я объединил в один компонент Simple_Authable.
Я изменил его функцию startup() на initialize(), чтобы не загромождать функцию beforeFilter в моем app_controller.
Одна из вещей, которые делает этот компонент, — это проверка того, кто является активным пользователем, и если этот пользователь не может быть найден, он либо ищет его на основе основного User.id, либо использует «гость». В любом случае компонент использует $this->Controller->Session->write() для сохранения информации об активном пользователе или госте.
Я также использую плагин Felix Authsome вместо стандартного компонента аутентификации CakePHP.
Когда я вхожу в систему, активный пользователь, очевидно, является гостем.
После того, как я отправил форму, активный пользователь все еще является гостем, потому что функция initialize() компонента срабатывает раньше всего остального. Затем подключаемый модуль Authsome вступает в игру и проверяет моего пользователя как «root», а также вызывает $this->SimpleAuthable->setActiveUser($id, true); чтобы заставить SimpleAuthable обновить информацию об активном пользователе, которую он хранит, через $this->Controller->Session; Затем меня перенаправляют, и моя простая информация о сеансе и вкладка сеанса DebugKit отражают, что я действительно являюсь пользователем root.
Однако, когда я пытаюсь перейти на страницу «администратора», скажем, /admin/users/index, о чудо, SimpleAuthable думает, что я все еще «гостевой» пользователь, потому что когда он выполняет $this->Controller->Session ->read() вызывает ключ, содержащий мой идентификатор пользователя, он получает пустой ответ, т. е. данные, хранящиеся на предыдущей странице, не сохраняются.
Возможно, между Authsome и SimpleAuthable происходит что-то странное, но все выглядит довольно просто, и, на мой взгляд, $this->Controller->Session должен сохранять и сохранять записанные в него данные.
Итак, я рассматриваю рефакторинг всех вызовов $this->Controller->Session и замену их на $this->Session, но сначала я хотел поделиться этим с сообществом и посмотреть, видел ли кто-нибудь что-нибудь подобное, и если так как они это решили.
С уважением, Кристофер.