2014-01-02 7 views
3

Когда я следую $this->Auth->allow('login');, этот подход мы не можем перенаправить на страницу панели мониторинга. Если я следую $this->Auth->allow();, этот подход мы можем перенаправить на страницу панели мониторинга.Не удалось перенаправить страницу в CAKE PHP

Но мне нужно использовать первый подход для входа.

У меня есть приложение AppController.php, которое выполняется в действии.

Ниже AppController.php код

function beforeFilter() { 

    Security::setHash('md5'); 

    // Authenticate 
    $this->Auth->authorize = 'Controller'; 
    $this->Auth->autoRedirect = false; 
    $subdomain = substr(env("HTTP_HOST"), 0, strpos(env("HTTP_HOST"), ".")); 


    if($this->params['controller']=="moderator") 
    { 

     //$this->Auth->allow(); // if i use this one my code is working fine. 
     $this->Auth->allow('login');    

     $this->Auth->loginAction = array('controller' => 'moderator', 'action' => 'login'); 
     $this->Auth->loginRedirect = array('controller' => 'moderator', 'action' => 'dashboard'); 
     $this->Auth->loginError = 'No username and password was found with that combination.'; 
     $this->Auth->logoutRedirect = array('controller' => 'moderator', 'action' => 'login'); 
     AuthComponent::$sessionKey = 'Auth.Admin'; 
    } 

} 

когда мы войти в страницу он будет перейти ModeratorController.php страницу контроллера, а затем проверить usename и пароль с помощью Auth, если имя пользователя & пароль исправить будет позвонить по телефонуприборная панель функция.

Ниже приводится ModeratorController.php Code

class ModeratorController extends AppController { 

public $components = array('RequestHandler','Session', 
     'Auth'=>array(
       'authenticate' => array(
         'Form' => array(
           'fields'=>array(
             'username'=>'username', 
             'password'=>'password' 
           ), 
           'userModel'=> 'Admin' 
         ), 
       ), 
       'loginAction' =>array(
         'Controller' => 'moderator', 
         'action' => 'login' 
       ), 
       'loginRedirect'=>array('Controller'=>'moderator', 'action'=>'index'), 
       'logoutRedirect'=>array('Controller'=>'moderator', 'action'=>'index'), 
       'authError'=>"You can't access that page", 
       'authorize'=>'Controller', 
       'loginError'=> 'Login error', 


     ) 
); 
public $helpers = array('Js' => array('Jquery'),'Html','Paginator'); 


    function beforeFilter() { 
     //used version cake 2.3.0. 

     parent::beforeFilter(); 

    } 


    // for moderator login process 

    public function login() { 

     if($this->Session->read('Auth.Admin.admin_id')) 
     {   
      $this->redirect('dashboard'); 
     } 

     if($this->request->data) 
     { 

     $this->Admin->set($this->data); 
     if($this->Admin->validates()) 
     { 
      if($this->Auth->login()){ 


       //$this->redirect('/moderator/dashboard'); // result: redirect to moderator/login    
       //$this->redirect(array('controller' => 'moderator', 'action' => 'dashboard')); // result: redirect to moderator/login 
       //$this->redirect($this->Auth->redirect()); // result: redirect to moderator/login 
       //$this->redirect(array('action' => 'dashboard')) // result: redirect to moderator/login 
       //$this->redirect('dashboard12'); // result: redirect to moderator/dashboard12 and give me 404. That result is correct 
       //$this->redirect('/dashboard'); // result: redirect to /dashboard and give me 404. That result is also correct 
       $this->redirect('dashboard')) // result: redirect to moderator/login 
      } 
      else 
      { 
       $this->Session->setFlash(__('Invalid email or password, try again')); 
      } 
     } 
    } 


    } 


    public function dashboard() 
    { 
     echo "I am in dashboard"; 
     exit(); 
    } 
} 

Благодаря

+0

Вы должны следовать стандартам CakePHP, которая сделает ваш контроллер ' Модераторы', а не 'Модератор'. Тогда вам нужно будет добавить 's' ко всем ссылкам, которые у вас есть, к контроллеру' moderator' в вашем файле 'AppController.php' –

+0

' dashboard.php'? Это модель, контроллер? Что это? –

ответ

0
$this->redirect('dashboard'); 

Должно быть

$this->redirect(array('action' => 'dashboard')); 

, если это действие также в контроллере щитков.

Никогда не используйте строки для ссылок и переадресации на внутренние страницы вашего приложения, только внешние ссылки должны использовать нотацию строки.

Кроме того, есть ли какая-либо конкретная причина, почему вы не используете CookieComponent? Содержимое вашего файла cookie не будет зашифровано вообще, и вы установите массу куки. Используйте компонент.

+0

Спасибо за ответ Я пробовал $ this-> redirect (array ('action' => 'dashboard')); этот, но нет никакой удачи. –

+0

return $ this-> redirect ($ this-> Auth-> redirect()); вместо $ this-> redirect ('приборная панель'); – user2509485

+0

также упоминал $ this-> Auth-> autoRedirect = false; в вашем контроллере, как функция beforeFilter() { ... $ this-> Auth-> autoRedirect = false; } – user2509485

2

Я вижу несколько вещей, которые являются технически неправильно:

  1. При создании в CakePHP вы должны следовать его стандартам

    Вы должны moderators как ваш контроллер и не moderator

  2. вы сделайте ссылку на приборную панель.PHP

    Is that a controller? or are you referring to the method

Если у вас есть имя контроллера ModeratorsController.php и способ есть имя dashboard(), то вы можете перенаправить так:

$this->redirect(array('controller' => 'moderators', 'action' => 'dashboard')); 

или вы могли бы даже перенаправить как этот

$this->redirect('/moderators/dashboard'); 

Если dashboard.php файл вы делаете ссылки на самом деле контроллер, который в этом случае должен быть DashboardsControler.php, то вы должны перенаправить

$this->redirect('controller' => 'dashboards'); 

или

$this->redirect('/dashboards'); 
Смежные вопросы