2013-05-27 5 views
1

내 symfony2 프로젝트에서 FOSFacebookBundle을 사용 중이며 잘 작동합니다. 사용자가 아직 등록되지 않은 경우 다른 사용자가 로그인 한 DB에 fb 사용자가 있으면 사용자가 DB에 추가되고 FB에서 검색된 데이터가 추가됩니다.가입 후 FOSFacebookBundle 리디렉션

지금까지는 좋았지 만 사용자가이 프로세스에 등록 된 경우 사용자를 프로필 편집 페이지로 리디렉션하려고합니다. 그렇지 않으면 홈페이지로 리디렉션됩니다. 어떻게 구현할 수 있습니까? 사용자가 존재하는지 또는 공급자가 아닌지를 알고, 공급자의 세션에 일부 정보를 등록한 다음 세션을 읽고 리디렉션을 수행 할 리스너를 만들어야합니까?

어떤 힌트를 환영합니다 :)

답변

1

당신은 사용자 정의 인증 성공 핸들러 및 인증 failurehandler를 구성해야합니다. AuthenticationSuccessHandlerInterface를 구현하는 서비스 구성 : 및

facebook_auth_success_handler: 
     class: MyHandler 
     public: false 
     arguments: 
      # your dependencies... 

AuthenticationFailureHandlerInterface를 그런 다음 fos_facebook 블록에서 security.yml이 처리기를 추가 :

firewalls: 
foo: 
    fos_facebook: 
     success_handler: facebook_auth_success_handler 
0

당신이합니다 (FOSUserBundle를 사용하는 것처럼 귀하의 질문에 태그에 따라), 컨트롤러에 연결하여 REGISTRATION_SUCCESS (사용자 생성시) 이벤트로 리디렉션 할 수 있습니다. 답변을

services: 
    acme_user.registration.success: 
     class: Acme\UserBundle\EventListener\RegistrationSuccessListener 
     arguments: [@router] 
     tags: 
      - { name: kernel.event_subscriber } 

https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/controller_events.md

+1

감사하지만 이건 내 문제가 해결되지 않습니다

// src/Acme/UserBundle/EventListener/RegistrationSuccessListener.php class RegistrationSuccessListener implements EventSubscriberInterface { private $router; public function __construct(UrlGeneratorInterface $router) { $this->router = $router; } public static function getSubscribedEvents() { return array( FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess' ); } public function onRegistrationSuccess(GetResponseUserEvent $event) { $url = $this->router->generate('profile_edit_page'); $event->setResponse(new RedirectResponse($url)); } } 

그리고 당신의 service.yml을 : 귀하의 경우에는

, 그것은 다음과 같이 가야한다. fosuserbundle과 함께 fosfacebookbundle을 사용하기 때문에 페이스 북 등록은 등록으로 간주되지 않고 단순한 로그인이므로 FOSUserEvents :: REGISTRATION_SUCCESS 이벤트는 전달되지 않습니다. 그건 그렇고, 당신의 코드가 간단한 등록을 위해 작동한다면, 당신은'onRegistrationSuccess (GetResponseUserEvent $ event)'를'onRegistrationSuccess (FormEvent $ event)'로 바꿔야 만합니다. – Zeux

+0

두번째 경우에도 사용자가 DB에 추가 될까요? FOSUserBundle에서 사용 가능한 이벤트에 액세스 할 수 없습니까? – cheesemacfly