Symfony3 onSecurityInteractiveLogin注销并设置flash
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony3 onSecurityInteractiveLogin注销并设置flash相关的知识,希望对你有一定的参考价值。
我将symfony2.2上的项目移植到symfony3.4。我有onSecurityInteractiveLogin事件的LoginListener。当用户登录时,我需要做一些检查。如果检查失败,则用户必须注销并显示一些Flash消息。下面的代码在symfony2中运行正常。在Symfony3中,所有工作都很好,除了flash消息,它没有显示,我认为会话清理。如何以登录表单显示flash消息?
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{
$user = $event->getAuthenticationToken()->getUser();
if ($user instanceof UserInterface) {
// Make some check based on user info in database...
$check = true || false;
// Logout user and set flash
if(!$check){
$request = $event->getRequest();
$session = $this->container->get('session');
$session->start();
$session->getFlashBag()->add('error','message');
$request->request->set('_target_path', '/logout');
}
}
}
答案
我认为使用自定义Authenticator class更好的解决方案。在构造函数中注入Session。您可以在checkCredentials()
方法中进行检查,在此处将错误输入FlashBag并返回false,如果用户没有通过您的检查。
或者你可以使用你的自定义user checker
以上是关于Symfony3 onSecurityInteractiveLogin注销并设置flash的主要内容,如果未能解决你的问题,请参考以下文章
Symfony3 + Select2 AJAX - 禁用选择验证
Symfony3 / Nelmio cors / fetch api — 400 错误请求