重定向到登录前的页面表单Symfony 3.4正在解析自定义侦听器中的liip_imagine路由

重定向到登录前的页面表单Symfony 3.4正在解析自定义侦听器中的liip_imagine路由,symfony,authentication,symfony-3.4,liipimaginebundle,Symfony,Authentication,Symfony 3.4,Liipimaginebundle,登录到Symfony后,我在获取重定向时遇到问题 它适用于某些页面,但对于其他页面,last\u route会话变量被设置为使用liip\u imagine\u过滤器的用户配置文件图片: "last_route" => [ "name" => "liip_imagine_filter", "params" => [ "filter" => "profile_picture" "path" =>

登录到Symfony后,我在获取重定向时遇到问题

它适用于某些页面,但对于其他页面,
last\u route
会话变量被设置为使用liip\u imagine\u过滤器的用户配置文件图片:

"last_route" => [
        "name" => "liip_imagine_filter",
        "params" => [
          "filter" => "profile_picture"
          "path" => "frederick-jacobson/5ba60fc93056b.png"
        ]
      ]
LoginFormAuthenticator:

class LoginFormAuthenticator extends AbstractFormLoginAuthenticator
{

       /*...*/

        protected function getDefaultSuccessRedirectURL()
        {
            /** @var Session $session */
            $session = $this->container->get('session');
            $priorPage = $session->get('last_route');

            return $this->router->generate($priorPage['name'], $priorPage['params']);
    //        return $this->router->generate('poll_index');
        }
}
这意味着它试图重定向到图像URL

services.yml:

poll.last_route_event_listener:
    class: PollBundle\Services\LastRouteListener
    tags:
        - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 30 }
LastRouteListener:

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernel;

class LastRouteListener
{
    public function onKernelRequest(GetResponseEvent $event)
    {
        // Do not save subrequests
        if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) {
            return;
        }
        $request = $event->getRequest();
        $session = $request->getSession();
        $routeName = $request->get('_route');
        $routeParams = $request->get('_route_params');
        if ($routeName[0] == '_') {
            return;
        }
        $routeData = ['name' => $routeName, 'params' => $routeParams];
        // Do not save same matched route twice
        $thisRoute = $session->get('this_route', []);
        if ($thisRoute == $routeData) {
            return;
        }
        $session->set('last_route', $thisRoute);
        $session->set('this_route', $routeData);
    }
}

有人能帮我找出我做错了什么和/或在登录前告诉我处理重定向到页面的正确方法吗?

正如我问题下面的评论所指出的那样。我使用的是一个自定义侦听器,它拾取
liip\u imagine\u过滤器
路由并将其设置为
last\u路由
会话变量

我可以在侦听器中添加一个签入,如下所示:

if ($routeName[0] == '_' || $routeName == 'liip_imagine_filter') {
    return;
}
但更好的处理方法是使用内置的
Symfony\Component\Security\Http\Util\TargetPathTrait

它通常在用户点击受限页面时自动设置,但可以使用
$this->saveTargetPath($request->getSession(),$providerKey,$request->getUri())手动设置

然后,您可以使用
$targetPath
LoginFormAuthenticator
中查找要重定向到的路由:

use Symfony\Component\Security\Http\Util\TargetPathTrait;


class LoginFormAuthenticator extends AbstractFormLoginAuthenticator
{

   /*...*/

    use TargetPathTrait;
    public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
        {
            $targetPath = $this->getTargetPath($request->getSession(), $providerKey);

            if (!$targetPath || $request->getBaseUrl() && !strpos($targetPath, $request->getBaseUrl())) {
                $targetPath = $this->container->get('router')
                    ->generate('poll_index');
            }

            return new RedirectResponse($targetPath);
        }
}

我不记得Symfony在任何地方保存了任何
last\u route
session变量,所以我假设您自己在session中保存了该值?我已经有一段时间没有处理这个项目了,我会仔细检查一下。谢谢,你真是恰到好处。难怪我能找到其他人有这个问题!非常感谢。