1

ユーザーがログインしているかどうかを確認する必要があるコントローラーに機能があり(zfcuserモジュールを使用しています)、ログインしていない場合はログイン画面を表示します。

これを実行する必要があることは私の理解です:

return $this->forward()->dispatch('zfcuser', array('action' => 'authenticate'));

残念ながら、これにより URL が変更されます。ログイン画面を表示し、ユーザーが URL を変更せずにログインできるようにしたい。拡張により、これは、ページに移動する代わりに、ユーザーを同じページにリダイレクトしたいことも意味し/userます。

これらの両方をどのように達成できますか?

4

1 に答える 1

5

私はここ数日間、これに苦労しました。ZfcUser 構成にはuse_redirect_parameter_if_present設定が含まれていますが、ドキュメントにはこれをどのように使用するかについての例はありません。私の方法がしっかりしているかどうかはわかりませんが、これを機能させるために私がしたことは次のとおりです。このメソッドは forward を使用するため、URL を保持することに注意してください。forward を使用せずにこれを行う別の方法がわかりません。

zfcuser 構成ファイルで、そのuse_redirect_parameter_if_present設定を に設定しtrueます。これにより、ZfcUser のログイン アクションがredirect要求内のパラメーターを検索します。これを使用して、認証が成功した後、ユーザーを指定された場所に戻します。

次に、ユーザーがログインしていることを確認したいコントローラーで、次のようにします。

if (!$this->zfcUserAuthentication()->hasIdentity()) {

    // Build the redirect URL using the route to which we want
    // the user returned.
    $redirect = $this->url()->fromRoute('your route', array(
        'optional-route-param' => 1234
    ));

    // Set the redirect URL in the request so that ZfcUser can
    // pick it up. This is the key.
    $this->getRequest()->getQuery()->set('redirect', $redirect);

    // Use ZfcUser's login action rather than its authentication
    // action.
    return $this->forward()->dispatch('zfcuser', array(
        'action' => 'login'
    ));
}

それが役立つことを願っています。これを機能させるのに問題がある場合は、コードを投稿する必要があるかもしれません。

于 2012-12-25T20:21:18.290 に答える