2012-06-14 3 views
0

У меня есть простое приложение cakephp, я использую этот учебник Simple Authentication and Authorization Application. У меня такой же точный код, как и в учебнике.Ошибка входа в CakePHP

Я запускаю это на своем компьютере с помощью Apache/MySQL, все работает отлично. Когда я развертываю его на своем общем хостинге (Bluehost), я начинаю получать логин.

Я проверил MySQL db на локальном и сервере. Разница заключается в том, что пароли в моем локальном db хэшируются, но пароли на хостинге dbs равны. (Это тот же самый точный код работает.) (Я хочу быть ясным в этом вопросе, это не мое намерение и, очевидно, другое поведение, но я не знаю, в чем причина этого.)

Это мой таблица:

CREATE TABLE users (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    username VARCHAR(50), 
    password VARCHAR(50), 
    role VARCHAR(20), 
    created DATETIME DEFAULT NULL, 
    modified DATETIME DEFAULT NULL 
); 

Эти соответствующие методы из моего контроллера для входа на Citidesk.ru соответственно:

public function add() { 
    if ($this->request->is('post')) { 
     $this->User->create(); 
     if ($this->User->save($this->request->data)) { 
      $this->Session->setFlash(__('The user has been saved')); 
      $this->redirect(array('action' => 'index')); 
     } else { 
      $this->Session->setFlash(__('The user could not be saved. Please, try again.')); 
     } 
    } 
} 

public function login() { 
    if ($this->request->is('post')) { 
     if ($this->Auth->login()) { 
      $this->redirect($this->Auth->redirect()); 
     } else { 
      $this->Session->setFlash(__('Invalid username or password, try again')); 
     } 
    } 
} 

и, наконец, это метод BeforeSave() моей модели:

public function beforeSave() { 
    if (isset($this->data[$this->alias]['password'])) { 
     $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']); 
    } 
    return true; 
} 

На моем локальном компьютере я могу сначала добавить пользователя и позже войти с этим пользователем. На сервере я могу добавить пользователя, но когда я хотел войти в систему, я вижу сообщение об ошибке «Недопустимое имя пользователя или пароль, повторите попытку»

+0

Почему вы не хранить пароли хэш-на сервере? – gcochard

+0

Вот что я прошу. Я намерен хранить их хэшированными. По какой-то причине они хранятся на равнине. Я не знаю, что вызывает эту поведенческую разницу. –

+0

Похоже на 'AuthComponent :: password ($ this-> data [$ this-> alias] ['password']);' call не работает. – gcochard

ответ

2

Похоже, вам нужно определить функцию beforeSave, чтобы принять параметр по умолчанию. Это, как представляется, проблема между CakePHP и PHP 5,4

public function beforeSave($options = array()) { 
    if (isset($this->data[$this->alias]['password'])) { 
     $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']); 
    } 
    return true; 
} 

Смотрите здесь для получения дополнительной информации:
http://community.webfaction.com/questions/8397/cakephp-2-auth-failing-on-production-only

+0

Моя версия php на производстве - 5.2.17, но я дам ей попробовать и поблагодарить вас за ссылку. –

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