2011-01-20 5 views
0

Im essayant d'obtenir mon routage admin travailler avec le composant Auth. Je veux que le routage suivant fonctionne. Mais lorsque je tape/admin, il redirige vers/admin/users/login et affiche cette erreur.question auth

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

Voici mon code 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()); 
    } 

} 
?> 

Si vous désirez plus d'informations laissez-moi savoir.

Merci

Répondre

0

Ne vous inquiétez pas, tout cela fonctionne ok :)

Dans AppController :: beforeFilter(), vous avez dit que pour vous connecter, le loginAction Utilisateurs/connexion (utilisateurs/admin_login si admin = > true)

quand vous allez dans les pages/index avec admin => true et vous n'êtes pas connecté, vous êtes redirigés vers les utilisateurs/admin_login, et comme cela dit:

mais quand je tape dans/admin il dirige vers/admin/users/login et affiche cette erreur.

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

La méthode UsersController :: admin_login() ne se trouve pas et vous devez créer.

+0

pourquoi ai-je besoin de deux fonctions de connexion? login et admin_login. J'ai ajouté admin_login, mais il m'a demandé de l'afficher. Est-ce que le composant d'authentification ne ressemble pas au routage administrateur? – madphp

+0

Tout cela à cause de la convention de gâteau. Si vous avez besoin du préfixe 'admin' au travail, vous avez vraiment besoin à la fois' 'login' et admin_login' être là. Et les vues correspondantes devraient également être créées, car il est logique que les utilisateurs et les administrateurs voyant différents login correctement? –

0

Vous pouvez forcer Auth à utiliser l'action de connexion non préfixé en spécifiant 'admin' => false dans votre loginAction. De cette façon, toutes les actions nécessitant une authentification utiliseront l'action de connexion sans préfixe. Donc, votre beforeFilter ressemblerait à quelque chose comme ceci:

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'); 

} 

De même, vous pouvez aller dans l'autre sens et spécifiez « admin » => true à utiliser uniquement admin_login.

0

Cela a fonctionné pour moi bien: -

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'); 
    } 
}