2011-11-29 2 views
29

로그인 확인 후 리디렉션을 비활성화해야합니다. 로그인 성공 여부 만 알 필요가 있기 때문입니다. submission/login_check url이 올바른 데이터를 제공하지만/login (실패시)으로 리디렉션합니다. 그 후에는
/로그인이 비어 있습니다.
extjs 4를 사용하여 로그인 양식을 설정하려고하므로 아약스 게시물 요청의 유효성을 검사해야합니다. login_check는 인증을 거쳐 사용자 세션을 생성하고 성공 또는 실패했는지 여부를 반환해야하지만 어디에도 전달하지 않아야합니다.Symfony 2에서 login_check 후 리디렉션을 비활성화하는 방법

내 login.html.twig 보이는 같은 :

namespace YourVendor\UserBundle\Handler; 

// "use" statements here 

class AuthenticationHandler 
implements AuthenticationSuccessHandlerInterface, 
      AuthenticationFailureHandlerInterface 
{ 
    public function onAuthenticationSuccess(Request $request, TokenInterface $token) 
    { 
     if ($request->isXmlHttpRequest()) { 
      $result = array('success' => true); 
      return new Response(json_encode($result)); 
     } else { 
      // Handle non XmlHttp request here 
     } 
    } 

    public function onAuthenticationFailure(Request $request, AuthenticationException $exception) 
    { 
     if ($request->isXmlHttpRequest()) { 
      $result = array('success' => false); 
      return new Response(json_encode($result)); 
     } else { 
      // Handle non XmlHttp request here 
     } 
    } 
} 

이 같은 핸들러를 등록

firewalls: 
    main: 
     form_login: 
      provider: fos_userbundle 
      failure_path: null 
      failure_forward: false 
+1

당신이 사용 사례를 예를 들어 단지 명확 수 :

나는 로그인 폼의 내부 동작을 설명하기 위해이 두 페이지가 유용하다고 이 응용 프로그램에 어떻게 적용되는지에 대한 약간의 배경 지식? – richsage

+0

extj를 사용하여 로그인을 설정하려고합니다. 4. 아약스 게시판을 통해 심포니에 보낼 양식을 받았지만, 로그인 페이지에 대한 GET 요청 양식을 확인한 후 비워 두지 않으면 괜찮습니다. 그래서 js는 처리 할 수있는 데이터를 얻기 위해 계속 대기하고 있습니다. – user1063963

답변

60

가 인증 처리기를 만듭니다

{% if is_granted("IS_AUTHENTICATED_REMEMBERED") %} 
    { success:true } 
{% else %} 
    { success: false } 
{% endif %} 

및 security.yml에서

서비스 :

방화벽에 서비스를 등록

firewalls: 
    main: 
     form_login: 
      success_handler: authentication_handler 
      failure_handler: authentication_handler 

이것은 당신에게 일반적인 아이디어를 줄 수있는 거친 예입니다 - 당신이 직접 세부 사항을 파악해야합니다. 만약 당신이 붙어있어 더 많은 설명이 필요하다면, 당신의 질문을 코멘트에 넣으십시오. 나는이 예를 자세히 설명하려고 노력할 것입니다.

+0

success_handler 및 failure_handler 옵션이 배열 일 수 있습니까? 어떤 번들을 설치해야한다면, 번들에 의해 제공되는 success_handler와 failure_handler를 등록해야한다. 하지만 그들은 이미 내 자신의 처리기에 등록되어 있습니다. 둘 이상의 핸들러를 등록하는 방법? –

1

로그인하지 않으면 정상적인 심포니 흐름으로 로그인 페이지로 리디렉션됩니다. 이는 사람에게 잘 작동합니다. 그러나 프로그래밍 방식의 솔루션을 찾고있는 것 같습니다.

양식에서 _target_path 설정을 시도해 "다음 페이지"를 선언 했습니까? Symfony는 언제나 당신을 어딘가로 보낼 것입니다. 그러나 원하는 곳에 어딘가에 설정할 수 있습니다.

관련 문제