在我的symfony2项目中,我使用的是FOSFacebookBundle,它工作正常。如果DB上已经存在fb用户,则用户登录;如果用户尚未注册,则将用户添加到DB,并从fb中检索数据。
到目前为止还不错,但现在我想将用户重定向到个人资料编辑页面,如果用户在此过程中注册,否则将被重定向到主页。我该如何实现呢?我只知道用户是否存在于提供程序中,我是否应该在提供程序中向会话注册一些信息然后创建一些侦听器来读取会话并进行重定向?
欢迎任何提示:)
您需要配置一个自定义身份验证成功处理程序和身份验证失败处理程序。配置一个服务,实现AuthenticationSuccessHandlerInterface:和AuthenticationFailureHandlerInterface
facebook_auth_success_handler:
class: MyHandler
public: false
arguments:
# your dependencies...
然后将此处理程序添加到安全性。在你的fos_facebook block下的Yml:
firewalls:
foo:
fos_facebook:
success_handler: facebook_auth_success_handler
当您使用FOSUserBundle
时(根据您问题上的标签),您可以连接到控制器并在事件REGISTRATION_SUCCESS
上重定向(当创建用户时)。
在你的例子中,它应该如下所示:
// 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
:
services:
acme_user.registration.success:
class: AcmeUserBundleEventListenerRegistrationSuccessListener
arguments: [@router]
tags:
- { name: kernel.event_subscriber }
https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/controller_events.md