Php Symfony2登录使用\u referer不工作

Php Symfony2登录使用\u referer不工作,php,symfony,Php,Symfony,以下是用于用户登录的my security.yml: user_secured_area: pattern: /* anonymous: ~ provider: user form_login: check_path: /login_check login_path: /login use_referer: true username_p

以下是用于用户登录的my security.yml:

user_secured_area:
        pattern: /*
        anonymous: ~
        provider: user
        form_login:
            check_path: /login_check
            login_path: /login
            use_referer: true
            username_parameter: _email
        logout:
            path: logout
            target: /
我已经检查了探查器中的HTTP\u referer,并且找到了正确的referer。但是,在登录时,它被重定向到根URL,而不是referer URL。你知道这件事吗,还是我漏掉了什么

控制员:

public function indexAction(Request $request){

    $session = $request->getSession();

    //get login error
    if($request->attributes->has(SecurityContextInterface::AUTHENTICATION_ERROR)){
        $error = $request->attributes->get(SecurityContextInterface::AUTHENTICATION_ERROR);
    }
    else if(null!==$session && $session->has(SecurityContextInterface::AUTHENTICATION_ERROR)){
        $error = $session->get(SecurityContextInterface::AUTHENTICATION_ERROR);
        $session->remove(SecurityContextInterface::AUTHENTICATION_ERROR);
    }
    else{
        $error = "";
    }

    //repopulate username
    $lastEmail = (null === $session) ? '' : $session->get(SecurityContextInterface::LAST_USERNAME); // a ? true : false

    return $this->render('BazaarBundle:Login:login.html.twig', array('last_email' => $lastEmail, 'error' => $error));
}
树枝:

<form action="{{ path('login_check') }}" method="post">
<label for="email">Email:</label>
<input type="text" id="email" name="_email" value="{{ last_email }}" />

<label for="password">Password:</label>
<input type="password" id="password" name="_password" />

<button type="submit">login</button>

电邮:
密码:
登录

默认行为是在登录后在询问页面上重定向

只有在会话中未存储URL时,才会使用使用\u referer选项。 否则,将重定向到默认目标路径(可以使用default\u target\u path选项定义)或默认页面(“/”),如果未定义参数

请查看Symfony调试器中的会话属性(登录页面时)。您是否有\u安全、防火墙、目标路径记录?价值是什么

编辑:似乎只有当您自动重定向到登录页面时才会定义会话变量(例如,当您尝试在没有所需权限的情况下访问安全区域时)

另一种可能是添加一个名为_target_path的隐藏字段,该字段具有所需的值(下面的示例)

通过表单添加目标路径(可能最好检查它是否为空):



干杯

上面说“没有会话属性”,我怎样才能做到用户每次登录时,都会重定向回上一页(如果可用)?我是否需要为HTTP_REFERER设置额外的会话?能否使用登录表单模板和登录操作更新您的问题?简单的问题,为什么不使用FOSUserBundle这样的包呢?这是一个很棒的捆绑包,它几乎完成了与身份验证相关的所有工作?我已经更新了我的问题,我不使用它,因为我有一个更复杂的用户管理,我需要一些登录页面,如管理员登录、超级管理员登录和具有不同角色的用户登录。嗯,好的。我不知道为什么在会话中并没有target_path,但你们可以尝试在表单中添加一个带有referer值的隐藏字段。。。我会编辑我的答案。我不是100%确定会话变量始终存在。。。仅当您尝试访问安全区域并且没有权限时,才可能定义此变量。此时,您会自动重定向到登录(然后可能会有一个会话变量)?编辑:我选中了,事实上,如果我试图直接点击登录链接而不被自动重定向,我没有会话属性
<input type="hidden" name="_target_path" value="{{ app.request.headers.get('referer') }}" />