1

ユーザーが現在ログインしているかどうかに基づいて、アプリケーションのホームページを返すための最良の方法を探しています。

beforeFilterの機能がこれに役立つようallow()ですが、この関数がユーザーをリダイレクトするように見えます。

むしろ、ユーザーがログインしている場合は特定のコントローラー(たとえば、ユーザーモデルの「ホーム」ビューを表示するため)を表示したいのですが、ログインしていないユーザーには静的なホームページを返します。同じURLリクエストを使用して表示されるため、リダイレクトは必要ありません。

これを行う標準的な方法はありますか?routes.phpまた、条件付きで変更できるかもしれないと考えましたが、リクエストのこの段階ではAuthComponentは使用できません。

4

2 に答える 2

2

コントローラアクションを指すルートがあります。たとえば、OverviewController:

Router::connect('/', array('controller' => 'overview', 'action' => 'homepage'));

次に、このアクション内を動的に切り替えます。

if (!($uid = $this->Session->read('Auth.User.id'))) {
    return $this->render('some_action');
    //or return $this->render('/Pages/some_static_page');
}
// normal homepage action for $uid xyz
于 2012-12-29T00:33:28.667 に答える
1

AuthComponentを使用するとlogin()、UsersControllerのアクションについて心配する必要がなくなります(これがデフォルトの設定だと思います)。ただし、そのメソッドにコードを挿入すると、次のように実行できます。

// In users_controller.php
function login()
{   
  if ( $this->Auth->user() ) { 
    if ( $this->Auth->user('role') == USER_ROLE_ADMIN ) { 
      $this->redirect('/admin');
    } else {
      $this->redirect('/');
    }   
  }   
}

ユーザーロールをチェックして適切にリダイレクトする行に注意してください。また、最も外側のifステートメント(if ( $this->Auth->user() ))も重要です。これは、ユーザーが正常にログインした場合にのみ、内部のコードを実行します。

于 2012-12-28T23:42:52.513 に答える