2014-03-07 9 views
0

나는 관리 번들을 만듭니다. 사용자가 로그인했는지 확인하기 위해 자신의 논리를 사용하고 있습니다. 그러나 사용자가 로그인하지 않은 경우에는 리디렉션되지 않습니다. isLoggedIn() 함수가 호출 될 때마다 코드를 디버깅하려고 시도하지만 생성자를 통해 호출되지만 로그인되어 있지 않습니다.리디렉션이 Symfony 2에서 작동하지 않습니다.

내 controoler 코드는 redirect() 방법을 사용하는 경우, 그것은 RedirectResponse의 인스턴스를 반환하고 액션 메소드에 사용되는

<?php 

    namespace Nitin\AdminBundle\Controller; 

    use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
    use Symfony\Component\HttpFoundation\Request; 
    use Bitcoin\AdminBundle\BitcoinAdminBundle; 
    use Symfony\Component\HttpFoundation\Response; 
    use Symfony\Component\HttpFoundation\RedirectResponse; 

    class AdminController extends Controller { 

    public $session; 
    public $container; 
    public $pageData; 

    public function __construct() { 
     $this->container = NitinAdminBundle::getContainer(); 
     $this->session = $this->container->get('session'); 
     $this->isLoggedIn(); 
    } 

    public function indexAction(Request $request) { //die(''.__LINE__); 
     return $this->render('NitinAdminBundle:Default:index.html.twig'); 
    } 

    public function isLoggedIn() { 
     $isLoggedin = $this->session->get('loggedIn', FALSE); 

     if (FALSE === $isLoggedin) { 
      return $this->redirect($this->generateUrl('nitin_admin_login')); 
     } 
     return false; 
    } 

    public function logoutAction() { 
     $this->session->invalidate(); 
     return $this->redirect($this->generateUrl('nitin_admin_login')); 
    } 
} 
+0

왜 __constructor를 사용하고 있습니까? –

+4

처음에는 복잡성이 무서운 것이지만 심포니의 보안 구성 요소를 사용하는 것은 가치가 있다고 생각합니다. – Maerlyn

+0

@Maerlyn 네 말이 맞아. 보안 구성 요소를 사용할 것입니다. 그러나이 문제가 발생한 이유를 확인하고 싶습니다. –

답변

1

한가지 더 Symfony\Component\HttpFoundation\Response;하는 방법입니다.

0

입니다. (생성자 메서드에 리디렉션하는 가장 좋은 방법은 아니다,하지만)이 코드 수있는 작품 :

@Maerlyn가 말했듯이
protected function isLoggedIn() 
{ 
    $isLoggedin = $this->session->get('loggedIn', false); 

    if (false === $isLoggedin) { 
     header('Location: ' . $this->generateUrl('nitin_admin_login')); 
     exit; 
    } 
} 

, 당신은 보안 구성 요소를 사용해야합니다. 대신 쓰기 header();

public function isLoggedIn() { 
     $isLoggedin = $this->session->get('loggedIn', FALSE); 

     if (FALSE === $isLoggedin) { 
      $this->redirect($this->generateUrl('nitin_admin_login'))->sendHeaders(); 
     } 
     return false; 
    } 

sendHeaders()의 할 수

+0

감사합니다. 감사합니다. 예, 보안 구성 요소를 사용합니다. 그러나 나는 그 요지를 정말로 알고 싶다. 이제 알겠습니다. 감사 –

관련 문제