2011-01-20 10 views
0

私の管理者ルーティングが認証コンポーネントで動作するようにしようとしています。次のルーティングが機能するようにします。authコンポーネントの問題

Router::connect('/admin', array('controller' => 'pages', 'action' => 'index', 'admin' => true)); 

ですが、/ adminを入力すると、/ admin/users/loginにリダイレクトされ、このエラーが表示されます。

Create UsersController::admin_login() in file: cms.local/controllers/users_controller.php 

ここは私のapp_controllerコードです。

class AppController extends Controller { 

    var $components = array('DebugKit.Toolbar','Auth','Session'); 

    function beforeFilter(){ 

     //Set up Auth Component 
     $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
     $this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'admin_index'); 
     $this->Auth->allow('display'); 

    } 

} 

users_controller

<?php 
class UsersController extends AppController { 

    var $name = 'Users'; 

    function login(){ 

    } 

    function admin_logout(){ 
     $this->Session->destroy(); 
     $this->redirect($this->Auth->logout()); 
    } 

} 
?> 

あなたは私が知っているより多くの情報が必要な場合。管理者ならば

おかげ

答えて

0

いけない心配、すべてがうまく動作:)

をAppControllerのでは::のbeforeFilter()あなたは=にログインするためには、LoginActionのユーザー/ログイン(ユーザ/ admin_loginであると述べました>

あなたが管理者=>真とページ/インデックスに移動し、あなたがログインしていない、あなたはユーザ/ admin_loginにリダイレクトされ、これが告げると)真:私が入力したときに

をが、 in/admin it/admin/users/loginに指示し、このエラーを表示します。

Create UsersController::admin_login() in file: cms.local/controllers/users_controller.php

方法がUserController :: admin_login()が見つからない場合、あなたはそれを作成する必要があります。

+0

は、なぜ私は2つのログイン機能が必要なのでしょうか?ログインとadmin_login。私はadmin_loginを追加しましたが、それはそれのためのビューを求めました。認証コンポーネントは管理ルーティングに似ていませんか? – madphp

+0

ケーキのおかげですべて。 'admin'という接頭辞が必要な場合は、実際には' login'と 'admin_login'の両方が必要です。ユーザーと管理者が異なるログイン権を持つことは論理的であるため、対応するビューも作成する必要があります。 –

0

あなたのloginActionに'admin' => falseを指定することによって、強制的に非プレフィックスログインアクションを使用することができます。このようにして、認証を必要とするすべてのアクションは、接頭辞のないログインアクションを使用します。だからあなたのbeforeFilterは次のようになります。

function beforeFilter(){ 

    //Set up Auth Component 
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login', 'admin' => false); 
    $this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'admin_index'); 
    $this->Auth->allow('display'); 

} 

同様に、あなたは他の道を行くことができるだけadmin_loginを使用する真の「管理者」=>を指定します。

0

これは罰金私の仕事: -

function beforeFilter() { 
    if (isset($this - > params['admin'])) { 
     $loggedAdminId = $this - > Session - > read("adminid"); 
     if (!$loggedAdminId && $this - > params['action'] != "admin_login") { 
      $this - > redirect("/admin/admins/login"); 
      $this - > Session - > setFlash('The URL you followed requires you login.'); 
     } else { 
      $this - > Auth - > allow('*'); 
     } 
    } else { 
     $this - > Auth - > loginAction = array('controller' = > 'users', 'action' = > 'login', 'admin' = > false); 
     $this - > Auth - > loginRedirect = array('controller' = > 'users', 'action' = > 'admin_index'); 
    } 
} 
関連する問題