2011-01-20 2 views
0

Im пытается получить мою маршрутизацию администратора, работающую с компонентом auth. Я хочу, чтобы следующая маршрутизация работала.auth component issue

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 re направляет/admin/users/login и отображает эту ошибку.

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

Метод UsersController :: admin_login() не найден, и вы должны создать его.

+0

почему мне нужно две функции входа в систему? login и admin_login. Я добавил admin_login, но потом попросил его просмотреть. Компонент auth не похож на маршрутизацию администратора? – madphp

+0

Все из-за торжества конвенции. Если вам нужен префикс 'admin' для работы, вам действительно нужны как' login', так и 'admin_login'. И соответствующие представления также должны быть созданы, так как логично, что пользователи и администраторы видят разные права входа? –

0

Вы можете заставить Auth использовать действие с невидимым входом, указав 'admin' => false в своем loginAction. Таким образом, все действия, требующие проверки подлинности, будут использовать действие с незапланированным логином. Так что ваш 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'); 
    } 
}