我正在使用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()
并在注册时使用它(不确定如何做)干杯们:)
答案 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());
}
}