2012-01-01 6 views
0

Я пытаюсь войти в приложение CakePHP 2.0, но всегда получаю ошибку входа. В официальном documentation и tutorial я прочитал, как хэширования паролей, но я все еще получаю ошибку входа в систему, вот как я это сделал:Хеширование паролей и AuthComponent

// Users Model 
public function beforeSave ($options = array()) { 
    $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']); 
    return true; 
} 

// Users Controller 
public $components = array ('Acl', 'Session', 
    'Auth' => array (
    'authenticate' => array (
     // login e logout sono di default i seguenti controller e views 
     // 'loginRedirect' => array ('controller' => 'users', 'action' => 'login'), 
     // 'logoutRedirect' => array ('controller' => 'users', 'action' => 'logout'), 
     'Form' => array (
      'fields' => array (
      // il valore default 
       'username' => 'email' 
      ), 
      'scope' => array (
       'User.active' => 1 
      ) 
     ) 
    ), 
    'authError' => 'Login error message I get' 
)); 

public function login() { 
    if ($this->request->is('post')) { // if the request came from post data and not via http (useful for security) 
     // the password is hashed in User Model in beforeSave method as read on documentation 
     // debug ($this->data); 
     if ($this->Auth->login()) { 
      $id = $this->Auth->user('id'); 
      return $this->redirect(array('controller'=>'users', 'action'=>$id, $this->Auth->user('username'))); 
     } else { 
      $this->Session->setFlash('Login error message', 'default', array(), 'auth'); 
     } 
    } 
} 

В представлении я это:

// the view login.ctp 
echo $this->Form->text('User.email', array('id'=>'email', 'value'=>'[email protected]')); 
echo $this->Form->password('User.password', array('id'=>'password', 'value'=>'password')); 

Если я пытаюсь отлаживать данные, которые я получаю это:

// in the controller 
debug($this->data); 
// in the view 
Array 
(
    [User] => Array 
    (
     [email] => [email protected] 
     [password] => thepass // not hashed 
    ) 
) 

Я не могу войти, потому что я всегда в Login error message. Как я могу это исправить?

ответ

0

Vitto,

(1) отображается Какое сообщение об ошибке?

(2) Только для записи обязательно убедитесь, что сессияFlash напечатана при компоновке!

echo $this->Layout->sessionFlash(); 

(3) Как вы установили свой компонент Auth? Например, в моем AppController я поставил так:

public $components = array(
    'Session', 
    'Cookie', 
    'Acl', 
    /** 
    * Default is authorize option is ActionsAuthorize. 
    * In this case, system uses AclComponent to check for permissions on an action level. 
    * learn more: http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#authorization 
    */ 
    'Auth'=> array(
     'authorize' => array(
      'Actions' => array('actionPath' => 'controllers') 
     ), 
     'authenticate' => array(
      'Form' => array(
       'fields' => array('username' => 'email', 'password' => 'password') 
      ) 
     ) 
    ) 
); 

(4) Наконец, я считаю (должен быть уверен) нет необходимости вручную хэш пароля, чтобы выполнить вход в систему. По крайней мере, после правильной настройки этот код работает для меня:

if ($this->request->is('post')) { 
     if ($this->Auth->login()) { 
      // recirect stuffs 
+0

спасибо за помощь 1) Я обновил ошибку в вопросе. | 2) если я пытаюсь распечатать sessionFlash, я получаю: Fatal error: вызов функции-члена sessionFlash() для не-объекта в /public_html/site.com/app/View/Layouts/default.ctp | 3) Я посмотрю на это! спасибо – vitto

+0

(2) И убедитесь, что вы установили помощник 'Layout' в массив' $ helpers' на вашем контроллере или AppController. 'public $ helpers = array (/ * others * /, 'Layout',/* others * /)'; – colares

+0

Возможно, вы говорите: ' Session-> flash(); echo $ this-> Session-> flash ('auth'); ?> 'это работает, я использую его для получения ошибки – vitto

Смежные вопросы