- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试添加一个 Symfony2 登录事件监听器,目标是在用户登录时在每个请求上设置数据库存储的区域设置,并回退到没有用户登录的默认区域设置。我使用 FOSUserBundle,并且正在尝试让 security.interactive_login 事件正常工作。我在互联网上找到了很多这样的代码:http://dev.dbl-a.com/symfony-2-0/how-to-add-a-symfony2-login-event-listener/
我有自己的 FOSUserBundle 子包,并且在 services.yml 中实现了此实现:
my_user.security.interactive_login_listener:
class: My\UserBundle\EventListener\UserListener
arguments: [@security.context, @doctrine]
tags:
- { name: kernel.event_listener, event: security.interactive_login, method: setLocaleForAuthenticatedUser }
my_user.security.kernel_request_listener:
class: My\UserBundle\EventListener\UserListener
arguments: [@security.context, @doctrine]
tags:
- { name: kernel.event_listener, event: kernel.request, method: setLocaleForUnauthenticatedUser }
问题是,即使在记录时,也永远不会触发 security.interactive_login 事件。相反,我的 setLocaleForUnauthenticatedUser 总是被触发。我发现的每个代码示例似乎都运行流畅,我的应用程序出了什么问题?
最佳答案
也想通了,并做了或多或少相同的工作:确实没有问题,但是登录后存在某种重定向,因此分析器永远不会显示触发交互式登录监听器的实际请求。
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent,
Symfony\Component\Security\Http\Event\FilterControllerEvent,
Symfony\Component\HttpKernel\Event\GetResponseEvent,
Symfony\Component\HttpKernel\HttpKernelInterface;
use FOS\UserBundle\Entity\User as BaseUser;
class LocaleListener {
protected $container;
protected $availableLocales;
public function __construct(\Symfony\Component\DependencyInjection\Container $container, $availableLocales) {
$this->container = $container;
$this->availableLocales = $availableLocales;
}
public function onKernelRequest(GetResponseEvent $event) {
$request = $event->getRequest();
$locale = $request->getPreferredLanguage($this->availableLocales);
$session = $request->getSession();
$token = $this->container->get('security.context')->getToken();
if( is_object( $token ) ) {
$user = $token->getUser();
if ($user instanceof BaseUser) {
$locale = $user->getLocale();
}
}
$session = $this->container->get('session');
$session->set('_locale', $locale);
$request->setLocale($locale);
}
}
在 services.yml 中:
user.locales.kernel_request_listener:
class: Acme\UserBundle\EventListener\LocaleListener
arguments: [ @service_container, [ 'en', 'fr', 'ru' ] ]
tags: [{ name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: -255 }]
关于security - Symfony2 登录事件监听器和 security.interactive_login 事件从未使用 FOSUser 触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13973389/
背景 我最近在 merge 期间遇到了一个意外未 merge 的文档文件的问题。 无论出于何种原因,我搞砸了 merge 并有效地删除了文件(和其他几个文件),因为我忘记了它们的存在。 现在我想查看我
我在我的网站上使用旧的 mysql 版本和 php 版本 4。 我的表结构: | orders_status_history_id | orders_id | orders_status_id |
我是一名优秀的程序员,十分优秀!