- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试在 FOSUserBundle 上实现事件
<?php
namespace EasyApp\UserBundle\Service;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Doctrine\Bundle\DoctrineBundle\Registry as Doctrine;
use EasyApp\UserBundle\Entity\UserLogin;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FormEvent;
use FOS\UserBundle\FOSUserBundle;
class LoginManager implements EventSubscriberInterface
{
/** @var \Symfony\Component\Security\Core\SecurityContext */
private $securityContext;
/** @var \Doctrine\ORM\EntityManager */
private $em;
/**
* Constructor
*
* @param SecurityContext $securityContext
* @param Doctrine $doctrine
*/
public function __construct(SecurityContext $securityContext, Doctrine $doctrine)
{
$this->securityContext = $securityContext;
$this->em = $doctrine->getEntityManager();
}
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::SECURITY_IMPLICIT_LOGIN => 'onSecurityImplicitLogin',
FOSUserEvents::REGISTRATION_COMPLETED=> 'onRegistrationCompleted'
);
}
public function onSecurityImplicitLogin(UserEvent $event)
{
die;
$user = $event->getAuthenticationToken()->getUser();
$request = $event->getRequest();
if ($this->securityContext->isGranted('IS_AUTHENTICATED_FULLY')) {
// user has just logged in
$this->saveLogin($request, $user);
}
}
public function onRegistrationCompleted(FilterUserResponseEvent $event){
$user = $event->getAuthenticationToken()->getUser();
$request = $event->getRequest();
saveLogin($request, $user);
}
public function saveLogin($request, $user){
$login = new UserLogin();
$login->setIp($request->getClientIp());
$login->setUser($user);
$this->em->persist($login);
$this->em->flush();
}
}
还有我的服务
services:
user_login_manager:
class: 'EasyApp\UserBundle\Service\LoginManager'
arguments: ['@security.context', '@doctrine']
tags:
- { name: 'kernel.event_subscriber', event: 'fos_user.security.interactive_login'}
- { name: 'kernel.event_subscriber', event: 'fos_user.registration.completed'}
但是我有问题。当我登录时没有任何反应,getSubscribedEvents()
被调用但不是 onSecurityImplicitLogin(UserEvent $event)
另一个问题是寄存器。 onSecurityImplicitLogin(UserEvent $event)
Catchable Fatal Error: Argument 1 passed to EasyApp\UserBundle\Service\LoginManager::onSecurityImplicitLogin() must be an instance of EasyApp\UserBundle\Service\UserEvent, instance of FOS\UserBundle\Event\UserEvent given in /Users/antoine/Documents/projects/easyApp/application/src/EasyApp/UserBundle/Service/LoginManager.php line 46
如果我评论这一行,我会在 onRegistrationCompleted(FilterUserResponseEvent $event)
编辑
services:
user_login_manager:
class: 'EasyApp\UserBundle\Service\LoginManager'
arguments: ['@security.context', '@doctrine']
tags:
- { name: 'kernel.event_subscriber'}
- { name: 'kernel.event_listener', event: 'security.interactive_login' }
最佳答案
两点:
服务定义中- { name: 'kernel.event_subscriber'}
就够了,没有事件入口。这是订阅者和听众之间的区别。一个监听器只能监听一个事件,通过服务定义中的 event
和 method
参数定义。订阅者可以监听多个事件,通过方法 getSubscribedEvents()
定义,因此服务定义中不需要更多参数。
第二点,您正在对事件类(UserEvent
和FilterUserResponseEvent
)进行类型提示,但您从未导入它们,因此 PHP 假定它们在同一位置命名空间(如错误消息中所述)。
use FOS\UserBundle\Event\UserEvent;
use FOS\UserBundle\Event\FilterUserResponseEvent;
关于php - 事件 FOSUserBundle Symfony2 注册和登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17566446/
刚开始用fosuserbundle,今天激活确认注册链接。 效果很好,但是如果用户再次单击电子邮件中的确认链接,则会收到该错误: 具有确认 token “3hiqollkisg0s4ck4w8g0gw
我正在关注这个:https://symfony.com/doc/current/bundles/FOSUserBundle/overriding_templates.html 我在 vendor/fr
这是我的 original question 的后续问题我试图在身份验证期间重新散列用户密码以从旧数据库迁移。 在那里实现有用的答案之后。我现在遇到了另一个问题,我没有收到任何错误(使用以下代码)但是
我在 Windows 上使用 symfony,我尝试按照 official documentation 中的描述配置 FOSUserBundle。 当我运行 php app/console doctr
我正在尝试为我的电子邮件定义自己的模板,该模板在用户请求密码时发送,但是在添加HTML部分时不起作用。 这是模板: {% trans_default_domain 'FOSUserBundle' %}
我已经搜索了两个小时,无法在FOSUserBundle中找到有关如何实现“忘记密码”功能的任何信息。 这是 bundle 软件的一部分,还是我必须创建自己的东西。 最佳答案 实际上,您没有找到任何关于
我正在 Symfony2 Web 应用程序中添加新功能,经过几次开发后,编辑用户功能停止工作。 出于某种原因,错误显示在 edit user screen 中。 ,不在 show user 中. 错误
我想覆盖 FOSUserBundle 中的注册表单。 我已关注此页面:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/1.3.x/Reso
我正在使用带有 FOSUserBundle 的 Symfony 2.8.2。当我尝试注销时,出现以下错误: You must activate the logout in your security
因此,当我在生产环境中通过 fosUserBundle 表单注册时,它会向我的 gmail 发送一封电子邮件,但电子邮件中没有确认链接,只有这个 registration.email.message
我已经在 FOSUserBundle 中激活了电子邮件确认。它允许用户在之后通过邮件收到链接他们注册。 registration: confirmation: enabled:
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 去年关闭。 Improve this
我正在构建一个应用程序,其中我有(至少)两种不同的用户类型,比如说买家和卖家。每个用户类型都应该有自己的逻辑(注册表格/流程、配置文件、权限等),但我想对每个用户使用 FOSUserBundle,以便
我正在使用 FOSUserBundle 和 Group 选项。 注册工作。组的创建也有效。 如果我创建 2 个组,admin 和 client 并手动添加 a:1:{i:0;s:10:"ROLE_AD
我有实体 用户 扩展 FOSUserBundle . class User extends BaseUser { ... protected $ref_id; /** * @
有人可以解释一下如何在 Controller 中手动创建一个“记住我” cookie吗? 我希望用户在按下“注册”后保持登录状态 按钮,而无需随后使用其凭据登录。 我试图手动创建一个cookie,但我
我目前正在尝试找出将原则持久角色实体实现为与 FOSUserBundle 兼容的 M2M 关系的最佳方法。以前我只使用带有默认实现的字符串,并使用教义数组映射来持久化它。 现在我需要将角色作为单独的实
我是 symfony 的新用户,我目前正在上一门类(class)(全日制),我的问题: # app/config/config.yml framework: translator:
我在Symfony应用程序中使用FOSUserBundle,这确实很棒。他们在单独的模板中具有登录和注册表单。我希望两者都在一个模板中彼此相邻显示。 因此,我创建了app/Resources/FOSU
我在覆盖实体时遇到问题。 我需要该字段 emailCanonical不是独一无二的。 这是我所做的: 在我的 UserBundle\Resources\config\doctrine\User.orm
我是一名优秀的程序员,十分优秀!