2012-12-19 2 views
1

사용자가 로그인했는지 (zfcuser 모듈을 사용하고 있는지) 확인해야하는 컨트롤러에 기능이 있습니다. 그렇지 않은 경우 로그인 화면을 표시하십시오.ZF2 로그인 전달

return $this->forward()->dispatch('zfcuser', array('action' => 'authenticate')); 

불행하게도,이 URL을 변경합니다

그것은 내가이 실행되어야한다 나의 이해이다. 로그인 화면을 표시하고 사용자가 URL을 변경하지 않고 로그인 할 수있게하려고합니다. 확장하면 이는 /user 페이지로 이동하는 대신 사용자를 다시 같은 페이지로 리디렉션하려는 것입니다.

이 두 가지를 어떻게 달성 할 수 있습니까?

+0

사용자가 액세스하려는 세션에 대한 링크를 저장하고 성공적인 로그인 후 해당 페이지로 리디렉션합니다. – motivast

+0

나는 kierzniak에 동의합니다. 세션에 경로 이름과 매개 변수를 저장하고 로그인으로 리디렉션하고이 경로 정보로 다시 리디렉션합니다. 이것은 분명히 비록 POST 요청과 함께 작동하지 않습니다. –

+0

당신은 URL을 보존하는 것이 더 나은 방법이라고 생각합니다. 충분히 공정하지만 로그인을 다시 리디렉션하는 방법은 무엇입니까? 현재/로그인 한 번 사용자 (기본 제공 사용자의 프로필 페이지)로 이동합니다. – Shoreline

답변

5

나는 지난 며칠 동안 나 자신과 힘들었다. ZfcUser 구성에는 use_redirect_parameter_if_present 설정이 포함되어 있지만 설명서에는이 설정을 사용하는 방법에 대한 예제가 없습니다. 내 방법이 견고한 지 모르겠다.하지만 여기가 내가이 일을하기 위해 무엇을했는지에 대한 것이다. 이 방법은 전달을 사용하기 때문에 URL을 보존합니다. 나는 앞으로를 사용하지 않고 이것을 할 또 다른 방법이 확실하지 않습니다.

zfcuser 구성 파일에서 use_redirect_parameter_if_present 설정을 true으로 설정하십시오. 이렇게하면 ZfcUser의 로그인 동작에서 요청의 redirect 매개 변수를 찾습니다. 인증을 성공하면 지정한 위치로 사용자를 반환합니다.

그럼, 내가 로그인 한 사용자를 확인하려는 컨트롤러, 내가 가진 :

if (!$this->zfcUserAuthentication()->hasIdentity()) { 

    // Build the redirect URL using the route to which we want 
    // the user returned. 
    $redirect = $this->url()->fromRoute('your route', array(
     'optional-route-param' => 1234 
    )); 

    // Set the redirect URL in the request so that ZfcUser can 
    // pick it up. This is the key. 
    $this->getRequest()->getQuery()->set('redirect', $redirect); 

    // Use ZfcUser's login action rather than its authentication 
    // action. 
    return $this->forward()->dispatch('zfcuser', array(
     'action' => 'login' 
    )); 
} 

그게 도움이되기를 바랍니다. 이 문제가 발생하면 코드를 게시해야 할 수도 있습니다.

+1

감사합니다. 내 목적에 맞는 $ this-> getRequest() -> getRequestUri()에서 리다이렉트 변수를 만들 수 있었다. – Shoreline