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 を作成する方法は 1 つだけです。

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);
    }

    ...
}

SecurityController で:

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_refererしてみてください:true

form_login:
    ...
    use_referer: true
于 2012-09-08T12:37:17.280 に答える