2

使用 Symfony 2.10 进行身份验证时,如果我按照 sercurity.yml 中的配置发布登录检查请求:

form_login:
    login_path: /account/login
    check_path: /account/login_check

_target_path 在表单上正确设置。

但是如果用户现在输入了错误的密码,_target_path 就会丢失,当用户现在输入正确的密码时,它将被重定向到默认位置,在我的例子中是首页。

我希望安全处理程序一直保留 _target_path,即使用户输入了错误的密码。

任何帮助表示赞赏:)

4

3 回答 3

2

我只找到一种方法:为 form_login 创建新的 failure_handler

添加你的security.yml:

form_login
    failure_handler: some_failure_handler_id

在该服务中:

public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
    ...

    $target_path = $request->request->get('_target_path');
    if ($target_path) {
        $request->getSession()->set('_security.login.target_path', $target_path);
    }

    ...
}

在安全控制器中:

if ($back_url = $session->get('_security.login.target_path')) {
    $session->remove('_security.login.target_path');
}

并以形式再次设置 target_path:

{% if back_url %}                               
    <input type="hidden" name="_target_path" value="{{ back_url }}" />
{% endif %}
于 2012-12-12T03:22:18.967 回答
0

为确保您_target_path不会被删除 - 您可以在 twig 模板中将其设置为当前 uri:

<input type="hidden" value="{{ app.request.uri }}" name="_target_path" />
于 2012-09-08T16:04:14.883 回答
0

尝试设置use_referertrue[见参考]:

form_login:
    ...
    use_referer: true
于 2012-09-08T12:37:17.280 回答