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 в начало файла и я его удалил и проблема решена!

Другие вопросы по тегам