У меня есть пользовательский объект с логическим значением hasTmpPassword. Это логическое значение устанавливается в значение true, пока пользователь не изменит свой пароль.

После входа в систему с временным паролем я перенаправляю на свою страницу changePassword (с DefaultAuthenticationSuccessHandler)

Как я могу запретить пользователю, входящему в систему (с временным паролем), получить доступ к другим страницам веб-сайта и всегда перенаправлять его на страницу changePassword?

Благодарность!

0
Ebpo 20 Фев 2014 в 02:04

2 ответа

Лучший ответ
  1. после входа в систему этого пользователя вы должны установить флаг в его сеансе (т.е. changePasswordNeeded).

    $ request-> getSession () -> set ('changePasswordNeeded', истина);

  2. Добавить слушателя, который будет запущен на KernelRequest

    kernel.listener.your_listener_name: класс: YourLitenerClass теги: - {имя: kernel.event_listener, событие: kernel.controller, метод: onKernelRequest}

  3. Перенаправление для формирования каждого запроса, кроме запроса 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); 
      }        
    }
    
1
ziollek 20 Фев 2014 в 02:32

Я не знаком с symfony2, но в обычном php я бы установил переменную сеанса, чтобы указать, что для аутентификации использовался временный пароль. Затем вы можете проверить, установлена ​​ли эта переменная / имеет ли определенное значение, в котором вы обрабатываете свою аутентификацию, и перенаправляете на страницу смены пароля всякий раз, когда пользователь пытается получить доступ к другой странице.

0
jeroen 20 Фев 2014 в 02:24