Redirect 登录失败后如何返回referer?

Redirect 登录失败后如何返回referer?,redirect,symfony,login,referer,Redirect,Symfony,Login,Referer,对于登录成功,有一个参数使用\u referer:true。对于登录失败,只有失败\u路径,这不是我要寻找的 第二件事:如何做到这一点并传递错误消息 第三件事:注销后如何返回推荐人?我解决了这个问题 有一个解决方案: 下面是解决我问题的代码: <?php namespace Acme\MainBundle\Handler; use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface; use Symf

对于登录成功,有一个参数
使用\u referer:true
。对于登录失败,只有
失败\u路径
,这不是我要寻找的

第二件事:如何做到这一点并传递错误消息

第三件事:注销后如何返回推荐人?

我解决了这个问题

有一个解决方案:

下面是解决我问题的代码:

<?php

namespace Acme\MainBundle\Handler;

use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;

class AuthenticationHandler implements AuthenticationFailureHandlerInterface, LogoutSuccessHandlerInterface
{
    public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
    {       
        $referer = $request->headers->get('referer');       
        $request->getSession()->setFlash('error', $exception->getMessage());

        return new RedirectResponse($referer);
    }

    public function onLogoutSuccess(Request $request) 
    {
        $referer = $request->headers->get('referer');
        return new RedirectResponse($referer);
    }
}
和config.yml:

services:
    authentication_handler:
        class: Acme\MainBundle\Handler\AuthenticationHandler

为什么失败路径不只是登录提示?因为我可以从每个子页面登录。我在指定的url上没有一个登录表单,所以当用户从另一个用户配置文件页面登录时,我不想将其重定向到主页。$request->headers->get('referer');有时返回null(我在Firefox中复制过)。此解决方案不可靠,需要回退或其他解决方案。@wojciech kulik我有以下错误:
$request->getSession()->setFlash('error',$exception->getMessage())
FatalErrorException:错误:调用/var/www/Symfony/src/Application/Sonata/UserBundle/Form/Handler/AuthenticationHandler.php第16行中未定义的方法Symfony\Component\HttpFoundation\Session\Session::setFlash()
@webyseo可能您得到了不同版本的Symphony,flash消息的设置方式也不同。也许这会有帮助:@WojciechKulik通过
$session->getFlashBag()->add('error',$exception->getMessage())精确解决谢谢!!如何在onAuthenticationFailure函数中获取登录限制的原则$用户->设置锁定(真);
services:
    authentication_handler:
        class: Acme\MainBundle\Handler\AuthenticationHandler