Как я могу обновить записи пользователя при входе в CakePHP? - PullRequest
0 голосов
/ 05 мая 2009

Я новичок в CakePHP и фреймворках, и я безуспешно пытался найти ответ в Google.

Я использую пустую функцию login () и хочу иметь возможность изменять пользовательские записи при входе в систему (например, last_login). Как я могу это сделать?

Ответы [ 4 ]

1 голос
/ 20 мая 2009

Если вы используете компонент Cake Auth, сначала вам нужно вставить следующую строку в функцию beforeFilter:

$this->Auth->autoRedirect = false;

Установка этого значения в false позволит следующему коду выполняться после того, как функция входа в CakePHP сделала свое дело.

В вашей функции входа добавьте:

if ($this->Auth->User()) {
$this->User->id = $this->Auth->user('id');
$this->User->saveField('last_login', date('Y-m-d H:i:s'));
}

Примечание. Убедитесь, что у вас есть поле last_login в вашей таблице пользователей и установлено значение datetime.

0 голосов
/ 22 июня 2009

Шаблон, который мне нравится, заключается в создании хука afterLogin () в модели User. Так что в вашем UsersController создайте что-то вроде:

function beforeFilter() {
    $this->Auth->autoRedirect = false;
    parent::beforeFilter();
}

function login() {
    if($this->Auth->User()) {
        if(!$this->User->afterLogin($this->Auth->User())) {
            return $this->logout();
        }

        $this->redirect($this->Auth->redirect());
    }
}

Затем в пользовательской модели создайте:

function afterLogin($User) {
    // perform actions on $User here

    return true; // return false to halt login
}
0 голосов
/ 05 мая 2009

Я полагаю, что вы можете добавлять вещи в функцию login (), даже если для autoRedirect установлено значение true. У меня были некоторые проблемы с неявным перенаправлением (пользователь запрашивает ограниченный ресурс, должен войти в систему, затем перенаправляется), поэтому я добавил некоторый код в свою функцию входа. Кажется, работает нормально, и функция автоматического входа в систему вызывается дополнительно.

Я бы сказал, просто добавьте логику для входа в систему, посмотрите, работает ли она для вас.

0 голосов
/ 05 мая 2009

Предполагая, что вы используете встроенное AuthComponent в своем приложении, вам нужно установить следующее свойство в вашем контроллере:

$this->Auth->autoRedirect = false;

Это позволит вам использовать вашу функцию login()logout()), чтобы делать вещи. Информация о текущем вошедшем в систему пользователе доступна через

$this->Auth->user()

Затем вы можете использовать эти данные, чтобы делать с этим пользователем все, что вы хотите.

В качестве бесстыдной саморекламы я предлагаю вам взглянуть на мой проект с открытым исходным кодом , где я использую эту технику для создания файла cookie "Запомнить меня".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...