2012-01-25 2 views
2

Это похоже на тривиальную вещь, но я действительно не могу найти, где я могу ее изменить. Я хочу использовать свою модель «Player» вместо User, но каждый раз, когда я включаюсь/игроки/логин, он перенаправляет меня на страницу «Missing Controller» и меняет изменения на/users/login.Как использовать другую модель для компонента Auth в CakePHP 2.0.4?

Я пробовал:

public $components = array(
    'Session', 
    'Auth' => array(
     'authenticate' => array('all' => array('userModel' => 'Player')) 
    ) 
); 

и

function beforeFilter() { 
    $this->Auth->authenticate = array('all' => array('userModel' => 'Player')); 
} 

EDIT: решаемые

'loginAction' => array('controller' => 'players', 'action' => 'login') 

в $ компонентах массива помогли, я думаю: D

+0

ли ваш PlayersController существует? Где вы помещаете этот код? – entropid

+0

@ Энтропия, конечно, у меня есть PlayersController, и я помещаю это в AppController. Я также делаю parent :: beforeFilter() в PlayersController. – lauriys

ответ

4

Я думаю, проблема в том, что вы не предоставляете систему аутентификации. Вы предоставляете некоторые параметры, которые будут использоваться во всей системе проверки подлинности, которая будет выбрана, но вы еще не выбрали ее (вы должны предоставить хотя бы одну форму, такую ​​как Form, Basic, Digest, ecc ..).

$this->Auth->authenticate = array(
    'all' => array('userModel' => 'Member'), 
    'Form', 
    'Basic' 
); 

(или же в $components массиве)

+0

Я не понимаю, для чего они нужны. Если я использую формы для входа в систему, я должен добавить форму? – lauriys

+0

Ну, вы должны каким-то образом идентифицировать своих пользователей, иначе как CakePHP узнает, вошли ли они в систему или нет? Возможно, попробуйте прочитать об этом: http://book.cakephp.org/2.0/ru/core-libraries/components/authentication.html. – entropid

+0

Да, вы должны добавить «Форма», если вы используете форму для входа в систему, а затем установите свое действие для входа, как описано на странице! – entropid

0

Вы должны сделать так

public $components=array(
    'Session', 
    'Auth'=>array(
     'authenticate'=>array(
      'Form'=>array(
       'userModel'=>'Player', 
      ) 
     ), 
     'loginAction'=>array('controller'=>'Players', 'action'=>'login'), 
+0

Этот вопрос 2 года; Я даже не использую PHP больше ... – lauriys

+0

Это может помочь кому-то еще – Ash

0

Используйте этот код в контроллере:

public $components = array(
    'Auth' => array(
    'loginRedirect' => array(
     'controller' => 'applications', 
     'action' => 'index' 
    ), 

    'logoutRedirect' => array(
     'controller' => 'applications', 
     'action' => 'login' 
    ), 

    'authenticate' => array(
      'Form' => array(
       'passwordHasher' => 'Blowfish', 
       'userModel' => 'Application' 
      ) 
     ),  
    ) 
); 

Не нужно добавьте код для функции beforeFilter(). $ компоненты загружают компонент Auth.

Благодаря Sujay