在我的 symfony2 项目中,我使用的是 FOSFacebookBundle,它工作正常。如果 fb 用户已经存在于用户登录的 DB 上,另一方面如果用户尚未注册,则用户将被添加到 DB,并从 FB 中检索数据。
到目前为止一切顺利,但是如果用户在此过程中注册,现在我想将用户重定向到个人资料编辑页面,否则将重定向到主页。我该如何实施?我只知道提供者中是否存在用户,我是否应该在提供者中向会话注册一些信息,然后创建一些侦听器来读取会话并进行重定向?
欢迎任何提示:)
在我的 symfony2 项目中,我使用的是 FOSFacebookBundle,它工作正常。如果 fb 用户已经存在于用户登录的 DB 上,另一方面如果用户尚未注册,则用户将被添加到 DB,并从 FB 中检索数据。
到目前为止一切顺利,但是如果用户在此过程中注册,现在我想将用户重定向到个人资料编辑页面,否则将重定向到主页。我该如何实施?我只知道提供者中是否存在用户,我是否应该在提供者中向会话注册一些信息,然后创建一些侦听器来读取会话并进行重定向?
欢迎任何提示:)
您需要配置自定义身份验证成功处理程序和身份验证失败处理程序。配置一个实现AuthenticationSuccessHandlerInterface : 和AuthenticationFailureHandlerInterface的服务
facebook_auth_success_handler:
class: MyHandler
public: false
arguments:
# your dependencies...
然后将此处理程序添加到您的 fos_facebook 块下的 security.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: Acme\UserBundle\EventListener\RegistrationSuccessListener
arguments: [@router]
tags:
- { name: kernel.event_subscriber }
https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/controller_events.md