В настоящее время я использую компонент авторизации для входа в систему. Я хочу обновить поле last_login в моей таблице пользователей при каждом входе пользователя на мой сайт.
Моя функция входа в пользовательский контроллер
public function login() {
$this->layout = 'main';
if ($this->request->is('post')) {
if($this->Auth->login()) {
$this->redirect(array('controller'=>'pages','action'=>'dashboard')); // after login , redirect on dahsboard
}
$this->Session->setFlash(__('Your username or password was incorrect.'));
}
$this->redirect(Router::url('/', true)); // there is no login.ctp file so it always redirect on home
}
В контроллере приложения у меня есть
class AppController extends Controller {
public $components = array(
'Auth',
'Session',
);
function beforeFilter() {
$this->Auth->loginAction = array(
'controller' => 'users',
'action' => 'login'
);
$this->Auth->logoutRedirect = array(
'controller' => 'pages',
'action' => 'display','home'
);
}
Я предлагаю вам выполнить один простой запрос на обновление после успешного входа, добавив
$user = $this->Session->read("Auth.User");
$this->User->id = $user['id'];
$this->User->saveField('last_login', date('Y-m-d H:i:s'));
Есть несколько других способов обновить поле last_login:
1.
$data['User']['last_login']=date('Y-m-d H:i:s');
$this->User->save($data);
2.
$this->User->updateAll(array('User.last_login'=>date('Y-m-d H:i:s')),array('User.id'=>$user['id']));
После этого ваш код будет выглядеть так,
public function login() {
$this->layout = 'main';
if ($this->request->is('post')) {
if($this->Auth->login()) {
$user = $this->Session->read("Auth.User");
$this->User->id = $user['id'];
$this->User->saveField('last_login', date('Y-m-d H:i:s'));
$this->redirect(array('controller'=>'pages','action'=>'dashboard')); // after login , redirect on dahsboard
}
$this->Session->setFlash(__('Your username or password was incorrect.'));
}
$this->redirect(Router::url('/', true));
// there is no login.ctp file so it always redirect on home
}
Других решений пока нет …