2014-02-19 85 views
0

我有一個用戶實體,它有一個布爾型「hasTmpPassword」。該布爾值設置爲true,直到用戶更改其密碼。將所有路由重定向到一個url直到滿足條件

與臨時密碼登錄後,我重定向到我changePassword頁(含DefaultAuthenticationSuccessHandler)

如何避免登錄用戶(使用臨時密碼),訪問網站的其他頁面,始終重定向他進入changePassword頁面?

謝謝!

回答

1
  1. 登錄後,你應該在他的會議(即 changePasswordNeeded)設置標誌的用戶。

    $ request-> getSession() - > set('changePasswordNeeded',true);

  2. 添加監聽器,這將onKernelRequest

    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); 
        }   
    } 
    
0

我不熟悉symfony2,但在普通的PHP中,我會設置一個會話變量來指示臨時密碼用於身份驗證。然後,您可以檢查該變量是否已設置/在您處理驗證時有一定的值,並且每當用戶嘗試訪問其他頁面時都會重定向到密碼更改頁面。

相關問題