使用FOSUserbundle注册时获取用户的普通密码

时间:2013-07-08 08:52:59

标签: symfony fosuserbundle

我正在使用FosUserBundle来处理我的应用程序登录/注册工作流程。然后我需要在注册时获取用户的普通密码,因为我想使用带有FOSOAuthServer软件包的grant_type=password工作流生成访问令牌。

我尝试了以下事件:

  • FOSUserEvents::REGISTRATION_INITIALIZE:此处没有密码
  • FOSUserEvents::REGISTRATION_SUCCESS:普通密码,但数据库中没有用户,因为在创建用户之前调用此事件
  • FOSUserEvents::REGISTRATION_COMPLETED:用户是在数据库中创建的,但$event->getUser()->getPlainPassword()返回null,因为在用户创建时,方法$userManager->updatePassword()plainPassword属性设置为null

您对我如何处理此问题有任何疑问吗?我有主要想法,但我不确定这是否是正确的方法:

  • 将密码放在FOSUserEvents::REGISTRATION_SUCCESS的会话中,然后生成访问令牌,然后删除FOSUserEvents::REGISTRATION_COMPLETED上的密码
  • 重写用户管理器类,使方法$userManager->updatePassword()不进行调用$userManager->eraseCredentials()并在注册时使用它(不确定如何做)

干杯们:)

1 个答案:

答案 0 :(得分:1)

您可以在事件FOSUserEvents :: REGISTRATION_SUCCESS中将plainpassword保存为用户模型上的新参数(例如tempPlainPassword参数),并随时使用它!

出于安全原因,您必须在使用后清空该参数的值(tempPlainPassword);

namespace [someBundle]\UserBundle\EventListener;

use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FormEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class RegistrationListener implements EventSubscriberInterface
{

    public static function getSubscribedEvents()
    {
    return array(
        FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess',
    );
    }

    public function onRegistrationSuccess(FormEvent $event)
    {
            $user = $event->getForm()->getData();
           $user->setTempPlainPass($user->getPlainPassword());
    }
}