5

安全なイベントタイプがあり、ユーザーがログインしているかどうかを確認し、ログインしていない場合はログインページにリダイレクトします。

<event-types>
    <event-type name="securedPage">
        <before>
            <broadcasts>
                <message name="CheckLogin"/>
            </broadcasts>
        </before>
        <results>
            <result name="NeedLogin" do="page.login" redirect="true"/>
        </results>
    </event-type>
</event-types>

ログインページには、イベントハンドラーにリンクするフォームがあり、action.loginログインが成功した場合はユーザーのホームページにリダイレクトされ、成功しなかった場合はログインページが再表示されます。

<event-handler name="action.login">
    <broadcasts>
        <message name="Login"/>
    </broadcasts>
    <results>
        <result name="LoggedIn" do="page.user.home" redirect="true"/>
        <result name="NotLoggedIn" do="page.login"/>
    </results>
</event-handler>

このコードはうまく機能しますが、私が今直面している問題は、ユーザーが別のページを要求した場合でも、常にユーザーのホームページにリダイレクトされることです。フォームはaction.loginイベントに投稿され、結果doはハードコーディングされてpage.user.homeいるため、ユーザーが最初にリクエストしたページを追跡し、そこにリダイレクトするようにコードを変更するにはどうすればよいですか?

4

2 に答える 2

5

ユーザーがログインする必要があるかどうかを判断するために使用するロジックでは、現在のイベントを取得して、共有スコープ(セッションスコープなど)に保存できます。

次に、ログインが成功したら、event.forward()を呼び出して、その値を渡します。

于 2011-09-14T03:27:43.300 に答える
0

一般的な考え方は次のとおりです。

  1. ページを「保護」するために実行されるメソッド/コードが何であれ、ユーザーがログインしていない場合は、アクセスしようとしたURLを取得し、転送する前に変数としてビューステートに戻します。ここでは、CGIスコープ、特にCGI.query_stringが友だちになります。

  2. サイン/ログインフォームで、ビューステートでこの'returnEvent'変数を確認し、存在する場合はフォームの非表示値として設定します。

  3. 成功後のサインアップ/インプロセスのどこかで、この'returnEvent'変数を確認し、存在する場合は、ユーザーを転送します。

于 2011-09-14T15:51:05.037 に答える