проблема с компонентом аутентификации - PullRequest
0 голосов
/ 20 января 2011

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

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

, но когда я набираю / admin, он перенаправляет на / admin / users / login и отображает эту ошибку.Код 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());
    }

}
?>

Если вам требуется дополнительная информация, дайте мне знать.

Спасибо

Ответы [ 3 ]

0 голосов
/ 23 ноября 2011

Вы можете принудить 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' => true, чтобы использовать только admin_login .

0 голосов
/ 04 августа 2012

Это сработало для меня нормально: -

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');
    }
}
0 голосов
/ 20 января 2011

Не волнуйтесь, все работает нормально:)

В AppController :: beforeFilter () вы указали, что для входа в систему loginAction имеет значение Users / login (Users / admin_login, если admin => true)

когда вы заходите в Pages / index с admin => true и вы не вошли в систему, вы перенаправляетесь на Users / admin_login, и, как это говорит:

но когда я набираю / admin, он перенаправляет на / admin / users / login и отображает эту ошибку.

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

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

...