2014-11-04 2 views
0

Мне нужно изменить параметр loginwardirect session здесь, чтобы он перенаправлялся на другую страницу как администратор или пользователь ... вещь есть. с индексом, жестко закодированным, он всегда будет перенаправляться в обычный индекс пользователя, игнорируя мой код, чтобы перенаправить пользователей администратора. Я хочу, чтобы это так, что если текущий пользователь является администратором, он будет перенаправлять admin_index вместоcakephp auth loginRedirect

appControler

public $components = array(
     'Session', 
     'Auth' => array(
      'loginRedirect' => array(
       'controller' => 'users', 
       'action' => 'index' 
      ), 
      'logoutRedirect' => array(
       'controller' => 'users', 
       'action' => 'login' 
       ), 
      'authenticate' => array(
       'Form' => array(
        'passwordHasher' => 'Blowfish' 
       ) 
      ) 
     ) 

    ); 

функция пользователь Войти контроллер

public function login() { 
    if($this->Auth->user('account_type')=='admin'){ 
     return $this->Auth->loginRedirect = array('controller' => 'users', 
     'action' => 'admin_index'); 
    } 
    elseif($this->Auth->user('account_type')=='user'){ 
     return $this->Auth->loginRedirect = array('controller' => 'users', 
     'action' => 'view'); 
    } 
    else { 
     if ($this->Auth->login()) { 
      return $this->redirect($this->Auth->redirect()); 
     } 
     $this->Session->setFlash(__('Invalid username or password, try again')); 
    } 
} 
+2

Сначала проверьте, если пользователь Войти, если ($ this-> Auth-> Логин()) {ВЕСЬ СВОЙ КОД} – Salines

+0

добавил сказал строки ... Теперь все мои логины всегда перенаправление на страницу входа в систему, но логин ссылка вверху страницы теперь выходит * означает, что мой пользователь действительно вошел в систему * –

ответ

0

Изменение возврата $ this-> перенаправления ($ this-> Auth-> перенаправления()); до

return $this->redirect($this->Auth->redirectUrl()); 

Ваша проблема в том, что вы возвращаете url для администраторов, но никогда не перенаправляете.

В качестве альтернативы вы можете добавить нужный адрес в $ this-> Auth-> redirectUrl() в строке или формат массива

+0

попробовал. все еще никаких изменений. что и я ищу использовать loginRedirect в зависимости от типа регистрации пользователя в –

+0

в порядке, немного поиграл с redirectUrl и, наконец, сумел заставить его перенаправить правильно: ergo return $ this-> redirect (array ('controller' => 'users', 'action' => 'admin_index')); стал возвратом $ this-> redirect ($ this-> redirectUrl (array ('controller' => 'users', 'action' => 'admin_index'))); –

1

От CakePHP документации, около $ loginRedirect: http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#AuthComponent :: $ loginRedirect

Это значение будет проигнорировано, если у пользователя есть значение Auth.redirect в их сеансе.

Значит, ваш $this->Auth->loginRedirect игнорируется. Вы можете переместить эту логику в обратный вызов beforeFilter() и установить там $this->Auth->loginRedirect, или вы можете перенаправить пользователя вручную.

public function login() { 
    if($this->Auth->user('account_type')=='admin'){ 
     return $this->redirect(array('controller' => 'users', 'action' => 'admin_index')); 
    } 
    elseif($this->Auth->user('account_type')=='user'){ 
     return $this->redirect(array('controller' => 'users', 'action' => 'view')); 
    } 
    else { 
     if ($this->Auth->login()) { 
      return $this->redirect($this->Auth->redirect()); 
     } 
     $this->Session->setFlash(__('Invalid username or password, try again')); 
    } 
} 
+0

отметил. наряду с ответом rrd. спасибо за помощь сэр –

0

У меня возникали те же проблемы, в случае неправильной аутентификации он перенаправлялся на неправильный URL. Поэтому я пробую код ниже для входа в систему, и он работает для меня.

$user = $this->Users->newEntity(); 
    $this->set('user', $user); 

    if ($this->request->is('post')) { 
     $user = $this->Auth->identify(); 
     if ($user){ 
      $this->Auth->setUser($user); 
      return $this->redirect($this->Auth->redirectUrl()); 
     }else{ 
      $this->Flash->error(__('Invalid username or password, try again')); 
     } 
    } 
Смежные вопросы