0

この質問により、Symfony2アプリケーションにログインした後にコードを実行する方法が明確になりました。特に、解決策はAuthenticationHandler、インターフェイスを実装するを作成することAuthenticationSuccessHandlerInterfaceです。

onAuthenticationSuccess()インターフェイスからの関数でAuthenticationSuccessHandlerInterface、ログイン後にユーザーがリダイレクトされるURIを指定する必要があると述べました。

デフォルトでは、ユーザーがセキュリティで保護された領域(つまりページX)にアクセスしようとすると、Symfony2はユーザーをログインページにリダイレクトします。ログインが成功すると、ユーザーは保護されたページXにリダイレクトされます。したがって、ログイン後に一意のページはありません(例:ホーム)。

ユーザーをページXonAuthenticationSuccess()にリダイレクトする関数をどのように処理しますか?

4

1 に答える 1

1

このソリューションを実装しました。1)アクセスした各ページ(ログインページを除く)のセッションにURIを保存します。2)関数にURIをロードして、onAuthenticationSuccess()それを。に返しRedirectResponse()ます。

ポイント1)を達成するには、2つのステップが必要です。最初)ベーステンプレートが定義されていると仮定して、次のコードを必要な場所に配置します(たとえば、<html>タグの前にも配置します。

{% block setcurrenturi %}
    {{ setCurrentURI(app.session, app.request.uri) }}
{% endblock %}

このコードでは、Twig Extensionで関数を定義する必要があります(Twig Extensionを実装していると仮定します。関数は非常に単純です:

public static function setCurrentURI($session, $URI) {
    $session->set('LAST_URI', $URI);
}    

次に、ログインフォームページのTwigテンプレートに移動し、ブロックを次のように再定義します。

{% block setcurrenturi %}
{% endblock %}

このように、ログインページのURIはセッションに保存されません。

ここで、onAuthenticationSuccess()関数に次の行を入力します。

  return new RedirectResponse($request->getSession()->get('LAST_URI'));
于 2012-08-10T16:22:54.100 に答える