У меня есть пользовательский объект с логическим значением hasTmpPassword. Это логическое значение устанавливается в значение true, пока пользователь не изменит свой пароль.
После входа в систему с временным паролем я перенаправляю на свою страницу changePassword (с DefaultAuthenticationSuccessHandler)
Как я могу запретить пользователю, входящему в систему (с временным паролем), получить доступ к другим страницам веб-сайта и всегда перенаправлять его на страницу changePassword?
Благодарность!
2 ответа
после входа в систему этого пользователя вы должны установить флаг в его сеансе (т.е. changePasswordNeeded).
$ request-> getSession () -> set ('changePasswordNeeded', истина);
Добавить слушателя, который будет запущен на KernelRequest
kernel.listener.your_listener_name: класс: YourLitenerClass теги: - {имя: kernel.event_listener, событие: kernel.controller, метод: onKernelRequest}
Перенаправление для формирования каждого запроса, кроме запроса change_temp_password (для избранных пользователей)
публичная функция onKernelRequest (FilterControllerEvent $ event) {
$request = $event->getRequest(); if ($request->getSession()->has('changePasswordNeeded')) { $expectedRoute = 'change_temp_password'; if ($expectedRoute === $event->getRequest()->get('_route')) { return; } $url = $this->router->generate($expectedRoute); $response = new RedirectResponse($url); $event->setResponse($response); } }
Я не знаком с symfony2, но в обычном php я бы установил переменную сеанса, чтобы указать, что для аутентификации использовался временный пароль. Затем вы можете проверить, установлена ли эта переменная / имеет ли определенное значение, в котором вы обрабатываете свою аутентификацию, и перенаправляете на страницу смены пароля всякий раз, когда пользователь пытается получить доступ к другой странице.
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.