CakePHP Auth Войти перестала работать
Мой компонент аутентификации работал нормально в течение прошлого года. Я зашел на свой сайт около двух часов назад и внес одно небольшое изменение. Я вышел на эти два часа, и с тех пор, как вернулся примерно полчаса назад, я не смог войти на свой сайт. Сообщение об ошибке говорит, что комбинация имени пользователя и пароля неверна. Я подумал, что каким-то образом значения изменились в моей базе данных или что мой браузер автоматически сохранил старый пароль, так что просто для того, чтобы убедиться, что я обновил пароль в своей базе данных, указав соответствующее хэшированное значение md5, и повторил попытку в своем браузере. Это все еще не работало.
Я опустошил свой кеш (это то, что я делаю довольно часто в любом случае), потому что мне предложили сделать это из этого поста, но это тоже не сработало (и не помогло авторам этого вопроса). Решение этого человека о добавлении чего-либо в файл представления, которое разорвало соединение с базой данных, не относится ко мне, потому что я не изменил ни один из файлов представления. Я также не изменил пользовательскую модель или контроллер приложения. Единственное, что я изменил за то время, что был раньше, это то, что я отредактировал действие UsersController online(). С тех пор я изменил его обратно. Фактически, я вошел в свою утилиту резервного копирования сайта и восстановил все файлы контроллера и модели в их последней резервной копии, которая была 2 дня назад, когда все работало. По-прежнему не влияет.
Я не могу войти ни в одну из зарегистрированных учетных записей. Я даже отключил один из паролей в базе данных и попытался войти в систему с этой учетной записью, но это тоже не сработало.
AppController
//I HAVE NOT CHANGED THIS IN SEVERAL MONTHS
public $helpers = array('Form', 'Html', 'Custom', 'Time', 'Js', 'Cache');
public $components = array('CustomPage', 'Session', 'CustomUser',
'Auth' => array(
'autoRedirect' => false,
'loginAction' => array('controller' => 'users', 'action' => 'login', 'prefix' => false, 'admin' => false, 'moderate' => false),
'loginRedirect' => array('prefix' => false, 'admin' => false, 'moderate' => false, 'controller' => 'account', 'action' => 'index'),
'logoutRedirect' => array('controller' => 'index', 'prefix' => false, 'admin' => false, 'moderate' => false),
'authError' => "You can't access that page",
'authorize' => array('Controller')
)
); // components
public function isAuthorized($user) {
return true;
}
UsersController
// DID NOT CHANGE FOLLOWING ACTION
public function login() {
if ($this->Session->read('Auth.User')) {
$this->Session->setFlash('You are already logged in');
$this->redirect(array('controller' => 'account', 'action' => 'index'));
}
$this->layout = "simple";
$this->set('title_for_layout', 'Login');
if ($this->request->is('post')) {
$this->User->UsersOnline->deleteAll(array('UsersOnline.session' => $this->viewVars['session_session']), false);
if ($this->Auth->login()) { // check user is logged in
$this->User->id = $this->Auth->user('id');
$this->User->saveField('last_login', date(Configure::read('Site.date_format'))); // save login time
$this->redirect($this->Auth->redirect()); // redirect to default place
} else {
$this->Session->setFlash('Your username/password combination was incorrect');
}
}
} // end login
// THE FOLLOWING ACTION WAS THE ONLY THING
// THAT WAS CHANGED BUT IT IS NOW BACK TO ORIGINAL VERSION
public function online() {
$page_id = $this->viewVars['page_id'];
$link = $this->viewVars['link'];
// CONTAIN
$this->User->UsersOnline->contain(array(
'User' => array(
'fields' => array(
'User.username', 'User.online'
),
'Avatar' => array(
'fields' => array(
'Avatar.file'
)
)
)
));
if($page_id){
$this->set('users', $this->paginate($this->User->UsersOnline, array('UsersOnline.page_id' => $page_id)));
$this->set('title_for_layout', 'Fans Online');
}
else{
$this->set('title_for_layout', 'Users Online');
$this->set('users', $this->paginate($this->User->UsersOnline));
$this->layout = "default";
}
} // end online action
Моя модель пользователя использует стандартные столбцы "username" и "password" для аутентификации пользователя.
Я добавил следующий код в свое действие login() UserController, и выводится правильный результат...
$password = md5($this->request->data['User']['password']);
print_r(
$this->User->find('first',
array(
'User.username' => $this->request->data['User']['username'],
'User.password' => $password
)
)
);
Опять же, я восстановил ВСЕ файлы контроллера и модели в их состояние 2 дня назад, поэтому я действительно понятия не имею, что может быть причиной этого.
Изменить 1: И теперь, чтобы быть в безопасности, я вернул все свои файлы просмотра обратно в их последние версии резервных копий с этих выходных. Это не решило проблему.
Изменить 2: если я отлаживаю $this->Auth->login
, результат пуст. С чего бы это вдруг стало пустым, если бы ничего не изменилось?
Редактировать 3: действие My UsersController register() правильно создает нового пользователя и автоматически регистрирует этого пользователя.
UsersController
public function register() {
if($this->Session->read('Auth.User')) {
$this->Session->setFlash('You are already registered');
$this->redirect(array('controller' => 'account', 'action' => 'index'));
}
$this->layout = "simple";
$this->set('title_for_layout', 'Register');
if ($this->request->is('post')) {
$this->User->create();
if ($this->User->save($this->request->data)) {
$id = $this->User->id;
$this->request->data['User'] = array_merge($this->request->data['User'], array('id' => $id));
if($this->Auth->login($this->request->data['User'])){
$this->Session->setFlash(__('Your account has successfully been created and you have logged in'));
$this->redirect(array('controller' => 'account', 'action' => 'index'));
} // end if account created and successful log in
else{
$this->Session->setFlash(__('Your account has successfully been created but you cannot log in'));
} // end else if account created but not logged in
} else {
$this->Session->setFlash(__('Your account could not be created. Please, try again.'));
} // end else if account cannot be created
} // end if method is post
} // end register
3 ответа
Это может помочь удалить все файлы из tmp/cache
а также tmp/models
Что ж, я так и не понял, в чем была НАЧАЛЬНАЯ проблема, но теперь я обнаружил, что возвращение всех моих измененных файлов контроллера, модели и представления, кажется, решает проблему. Меня все еще беспокоит, что я не знаю, что было первоначальной проблемой.
Тем не менее, я обнаружил, что после того, как я обновил все свои пароли в моей базе данных на соответствующий им хэш md5, это вызвало у меня постоянную проблему. Я предполагаю, что Cake не использует md5, который я думал, поэтому пароли не были сопоставлены должным образом. Так что даже после возврата всех моих измененных файлов все пароли стали неверными.
Если я когда-нибудь выясню, в чем была изначальная проблема, я обновлю.
У меня была та же проблема. Она работала нормально, но внезапно после некоторых изменений в коде, которые не имели ничего общего с частью входа в систему, функция входа в систему не работала, и удаление внесенных мной изменений не помогло, и когда я искал и обнаружил, что у вас есть та же проблема, и вы не нашли, в чем проблема, я понял, что это должно быть что-то очень простое, поскольку это не дало мне никакой ошибки, и я внезапно обнаружил, что когда я редактировал файл пользовательского контроллера, я случайно написал ' char в начало файла и я его удалил и проблема решена!